R删除多列中的重复项和总计

时间:2018-12-22 00:29:35

标签: r duplicates

我正在使用R,并尝试删除已经计算两列出现次数的重复项。我正在使用的实际数据非常大,所以我试图避免使用循环。

table <- data.table(set = c('a', 'b', 'a', 'd', 'b', 'd', 'd', 'c'), pred = c('p', 'p', 'p', 'q', 'q', 'q', 'q', 'q'), setcount = 1:8, predcount = 9:2)

   set pred setcount predcount
1:   a    p        1         9
2:   b    p        2         8
3:   a    p        3         7
4:   d    q        4         6
5:   b    q        5         5
6:   d    q        6         4
7:   d    q        7         3
8:   c    q        8         2

我要开始的是这样:其中“ set”和“ pred”必须都相同才能计入重复项-例如第1行和第3行以及第4、6和7行。这些行,我想对已删除行的计数求和以实现此目的:

   set pred setcount predcount
1:   a    p        4        16
2:   b    p        2         8
3:   b    q        5         5
4:   c    q        8         2
5:   d    q       17        13

由于我没有编码方面的经验,因此到目前为止,我的工作如下:

remove.Duplicates <- function(input, x, y, z, zz) {
            table <- input
            table <- arrange(table, x, y)
            table <- table[duplicated(table$x)&duplicated(table$y)|
                               duplicated(table$x, fromLast = T)&duplicated(table$y, fromLast = T),]
            table <- table[duplicated(table$y)|duplicated(table$y, fromLast = T),]
            table <- aggregate(z ~ .,table, sum)

            input <- input[input[, .I[!(duplicated(x)|duplicated(x, fromLast = T))], y]$V1]
            rbind(input, table)
        }

当我只有“ setcount”(z)列时,此方法很好用,但是我也很难汇总“ predcount”(zz)列。 zz变量不在代码中,因为我无法使其正常运行。当前代码有效,但仅适用于3列子集。

我敢肯定有一种更有效的方法来执行此操作,但是我现在茫然不知所措。感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我认为您只需要汇总数据:

table[, lapply(.SD, sum, na.rm=TRUE), by=list(set,pred)]