求和列

时间:2017-03-03 13:40:45

标签: r dplyr tidyr

我想要简化一个大型数据集,但我目前遇到一些麻烦。 下表显示了原始目标组合。 count列表示例如A到B的出现次数。

@Mapper
public interface PolicyMapper {
    List<Policy> findPolicy(@ParametersAutoBinding PolicyFilterDto filter);
)

我遇到的问题是,例如A到C(1),实际上与C到A(3)相同。因为方向对我来说并不重要,只有A和C之间存在联系,我想知道如何才能简单地使用A到C(4)。

问题是我有一个400级的因子,所以我不能手动完成。是否有dplyr或类似的东西能为我解决这个问题?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

以下是使用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 = TRUE的单个字符串中。结果字符串向量在aggregate中用于对观察值进行分组并对计数值求和。 with减少了输入。