【问题标题】:Sum and order columns [duplicate]求和和排序列[重复]
【发布时间】:2017-03-03 13:40:44
【问题描述】:

我有一个想要简化的大型数据集,但我目前在一件事上遇到了一些麻烦。 下表显示了起始目的地组合。 count 列,例如表示 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 或类似的东西可以为我解决这个问题?

【问题讨论】:

  • 您可能会发现this 很有帮助
  • @alexis_laz 谢谢:)。

标签: r dplyr tidyr


【解决方案1】:
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

【讨论】:

  • 谢谢。它工作完美,实际上非常简单。请问为什么“t(apply(”)。我知道它对列进行排序,但我不确定为什么不直接进行聚合。
  • @FilipeTeixeira 您需要对行进行操作(排序),这就是您需要apply(df[1:2], 1, sort) 的原因;在结果矩阵中,原始列现在是行,因此您需要使用 t-function 将它们转回
  • 我现在明白了。谢谢你:)。
【解决方案2】:

这是使用 aggregatesortpastemapply 的基本 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=T​​RUE 的字符串中。在aggregate 中使用生成的字符串向量对观察结果进行分组并对计数值求和。 with 减少打字。

【讨论】:

  • 感谢您的解释。与上述解决方案有什么实际区别吗?看到不同的方法仍然很有趣,所以一点也不浪费。
猜你喜欢
  • 2019-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-03
  • 2011-10-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多