数据表中变量的唯一组合的总和

时间:2015-09-23 09:18:11

标签: r data.table

我有一个数据表,其中包含以下格式,表示许多类别关系的国家/地区之间的关系强度:

<framelayout>
   <cardview/>
   <recylerview/>
</framelayout>

现在我想总结每个类别的所有相互关系(例如AB和BA; DC和CD等......)(AB和BA需要&#34;合并&#34;)。

什么可以是简洁的&#34;非常R&#34;解决方案吗?是否有任何现有功能可以做到这一点?

目前,我已经为&#34; Country1&#34;设置了密钥。和#34; Country2&#34;列,但没有找到我接下来可以做的匹配相应的行..

感谢任何线索。

3 个答案:

答案 0 :(得分:7)

使用pminpmax ..

require(data.table) # v1.9.6
dt = fread("Country1    Country2     Value     Category
A           A            4         1
A           B            2         1
A           C            9         1
B           A            3         2
B           D            4         1
C           A            2         2
D           C            7         2")
dt[, .(total = sum(Value)), 
     by=.(Country1 = pmin(Country1, Country2), 
          Country2 = pmax(Country1, Country2))]
#    Country1 Country2 total
# 1:        A        A     4
# 2:        A        B     5
# 3:        A        C    11
# 4:        B        D     4
# 5:        C        D     7

如果您想在Category中使用此功能,只需将其添加到by

答案 1 :(得分:1)

你如何“总结所有相互的双方关系”取决于你想做什么。

计算每个类别中的关系数量:

x[, .N, by=Category]

总结每个类别中所有关系的value

x[, sum(Value), by=Category]

或更好的输出:

x[, list(TotalValue = sum(Value)), by=Category]

答案 2 :(得分:0)

# x = your data as data.table
x[,  rel :=paste(fromCountry, toCountry, sep = "-")]
x[, .(sums = sum(Value)), by = rel]

# if fromCountry - toCountry is considered to be bidirectional, then make sets:

library(Kmisc)
x[, sets := Kmisc::str_sort(rel)]
x[, .(sum = sum(Value)), by = sets]