【发布时间】:2018-12-22 09:13:39
【问题描述】:
我正在使用 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 列子集。
我确信有一种更有效的方法可以做到这一点,但我现在不知所措。我很感激任何帮助!
【问题讨论】:
标签: r duplicates