R 计算'的出现次数';反向'';字符串在两列中匹配

R 计算'的出现次数';反向'';字符串在两列中匹配,r,dataframe,data.table,R,Dataframe,Data.table,我现在处理R中的一个表,如下所示: A B 09-2016 B A 09-2016 A C 10-2016 C A 11-2016 A B 12-2016 我曾尝试计算前两列中相同行值的出现次数,例如,“A B”在表中出现两次,我使用以下R代码: library(data.table) dt = data.table(data) dt[, list(Freq =.N, V3), by=list(V1,V2)] 我可以得到以下输出: A B 2 09-2016 B A 1 09-2016 A

我现在处理R中的一个表,如下所示:

A B 09-2016
B A 09-2016
A C 10-2016
C A 11-2016
A B 12-2016
我曾尝试计算前两列中相同行值的出现次数,例如,“A B”在表中出现两次,我使用以下R代码:

library(data.table)
dt = data.table(data)
dt[, list(Freq =.N, V3), by=list(V1,V2)]
我可以得到以下输出:

A B 2 09-2016
B A 1 09-2016
A C 1 10-2016
C A 1 11-2016
A B 2 12-2016
A B 3 09-2016
B A 3 09-2016
A C 2 10-2016
C A 2 11-2016
A B 3 12-2016
现在,我想将反转模式的出现次数(例如,“ab”和“ba”)计算为相同的值,并得到以下输出:

A B 2 09-2016
B A 1 09-2016
A C 1 10-2016
C A 1 11-2016
A B 2 12-2016
A B 3 09-2016
B A 3 09-2016
A C 2 10-2016
C A 2 11-2016
A B 3 12-2016
我的问题是:如何更改上述代码以处理此案例?还是有别的办法?Thx.

库(data.table)
library(data.table)
dt <- data.table(V1 = c("A", "B", "A", "C", "A"),
    V2 = c("B", "A", "C", "A", "B"),
    V3 = c("09-2016", "09-2016", "10-2016", "11-2016", "12-2016"))
dt[, tempvar := paste0(sort(c(V1,V2)), collapse = ""), by = 1:nrow(dt)]    
dt[, freq := .N, by = tempvar][, tempvar:=NULL]

dt这里尝试使用
pmin
pmax
粘贴已排序的两列

library(data.table)

dt[, freq := .N, by = .(new = paste(pmin(V1, V2), pmax(V1, V2)))][]

#   V1 V2 V3      V4 freq
#1:  A  B  2 09-2016    3
#2:  B  A  1 09-2016    3
#3:  A  C  1 10-2016    2
#4:  C  A  1 11-2016    2
#5:  A  B  2 12-2016    3

您可以先选择两列V1、V2的
max
min
,然后选择
groupby
这些值,以便对对称对频率进行求和

dt<-dt[,.(mx=max(as.character(V1),as.character(V2)),mn=min(as.character(V1),as.character(V2)))
       ,by=.(V1,V2,V3)]
dt<-dt[,.(Freq =.N,V1,V2,V3), by=.(mx,mn)][,.(V1,V2,V3,Freq)]
dt

dtI引用的数据表与OP使用的数据表相同。我们对答案进行了编辑,以明确包含该数据表。