我有一个数据表,其中包含以下格式,表示许多类别关系的国家/地区之间的关系强度:
<framelayout>
<cardview/>
<recylerview/>
</framelayout>
现在我想总结每个类别的所有相互关系(例如AB和BA; DC和CD等......)(AB和BA需要&#34;合并&#34;)。
什么可以是简洁的&#34;非常R&#34;解决方案吗?是否有任何现有功能可以做到这一点?
目前,我已经为&#34; Country1&#34;设置了密钥。和#34; Country2&#34;列,但没有找到我接下来可以做的匹配相应的行..
感谢任何线索。
答案 0 :(得分:7)
使用pmin
和pmax
..
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]