总和和顺序列
Sum and order columns
我有一个大型数据集想要简化,但我目前在处理一件事时遇到了一些麻烦。
下面的 table 显示了一个起点终点组合。计数列,例如表示A到B的出现次数。
From To count
A B 2
A C 1
C A 3
B C 1
我遇到的问题是,例如 A 到 C (1),实际上与 C 到 A (3) 相同。因为方向对我来说并不重要,只是 A 和 C 之间有联系,我想知道我怎么能简单地让 A 到 C (4)。
问题是我有一个400级的因素,所以我不能手动做。有什么 dplyr 或类似的东西可以为我解决这个问题吗?
这是使用 aggregate
、sort
、paste
和 mapply
的基础 R 方法。
with(df, aggregate(count,
list(route=mapply(function(x, y) paste(sort(c(x, y)), collapse=" - "),
From, To)), sum))
route x
1 A - B 2
2 A - C 4
3 B - C 1
此处,mapply
从 from 和 to 变量中获取成对的元素,对它们进行排序并将它们粘贴到一个 collapse=TRUE 的字符串中。生成的字符串向量在 aggregate
中用于对观察值进行分组并对计数值求和。 with
减少打字。
df[1:2] <- t(apply(df[1:2], 1, sort))
aggregate(count ~ From + To, df, sum)
结果:
From To count
1 A B 2
2 A C 4
3 B C 1
我有一个大型数据集想要简化,但我目前在处理一件事时遇到了一些麻烦。 下面的 table 显示了一个起点终点组合。计数列,例如表示A到B的出现次数。
From To count
A B 2
A C 1
C A 3
B C 1
我遇到的问题是,例如 A 到 C (1),实际上与 C 到 A (3) 相同。因为方向对我来说并不重要,只是 A 和 C 之间有联系,我想知道我怎么能简单地让 A 到 C (4)。
问题是我有一个400级的因素,所以我不能手动做。有什么 dplyr 或类似的东西可以为我解决这个问题吗?
这是使用 aggregate
、sort
、paste
和 mapply
的基础 R 方法。
with(df, aggregate(count,
list(route=mapply(function(x, y) paste(sort(c(x, y)), collapse=" - "),
From, To)), sum))
route x
1 A - B 2
2 A - C 4
3 B - C 1
此处,mapply
从 from 和 to 变量中获取成对的元素,对它们进行排序并将它们粘贴到一个 collapse=TRUE 的字符串中。生成的字符串向量在 aggregate
中用于对观察值进行分组并对计数值求和。 with
减少打字。
df[1:2] <- t(apply(df[1:2], 1, sort))
aggregate(count ~ From + To, df, sum)
结果:
From To count
1 A B 2
2 A C 4
3 B C 1