使用散列或其他方法评估与R中的组合列相关的信息

时间:2015-04-04 23:18:44

标签: r algorithm

我有一张记录表,如下所示

ab   cd   ef   10
ac   bd   fg   20
abc  cde  efg  10
ab   cd   ef   20

在上表中,第一行和第四行中的前三列完全相同。我需要将这两行组合在一起,以获得

ab cd ef 30

在R中实现这一点的正确方法应该是什么。迭代每一行和每一行都能完成这项任务,但速度太慢了。我想我们需要像前三列一样哈希,但我不知道如何在R中进行。

2 个答案:

答案 0 :(得分:1)

您可以使用包dplyr

尝试以下操作

数据

df <- read.table(header= FALSE, text = "
ab   cd   ef   10
ac   bd   fg   20
abc  cde  efg  10
ab   cd   ef   20")

代码

  library(dplyr)
  group_by(df, V1, V2, V3) %>%
      mutate(SUM = sum(V4)) %>%
      distinct()
  ## Source: local data frame [3 x 5]
  ## Groups: V1, V2, V3
  ## 
  ##    V1  V2  V3 V4 SUM
  ## 1  ab  cd  ef 10  30
  ## 2  ac  bd  fg 20  20
  ## 3 abc cde efg 10  10

答案 1 :(得分:1)

这是使用基数R和函数aggregate

的单行替代方案

数据

df <- read.table(header= FALSE, text = "
ab   cd   ef   10
ac   bd   fg   20
abc  cde  efg  10
ab   cd   ef   20")

<强>解决方案

> aggregate(V4 ~ ., data=df, sum)
   V1  V2  V3 V4
1  ab  cd  ef 30
2 abc cde efg 10
3  ac  bd  fg 20

V4表示在您按.(所有其余列)分组数据后要汇总的列。