r - R删除重复并聚合多列中的总和
问题描述
我正在使用 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 列子集。
我确信有一种更有效的方法可以做到这一点,但我现在不知所措。我很感激任何帮助!
解决方案
我认为您只需要汇总数据:
table[, lapply(.SD, sum, na.rm=TRUE), by=list(set,pred)]
推荐阅读
- ruby-on-rails - 启动服务器失败
- solr - 带有统一荧光笔的 AEM
- javascript - BootstrapVue 访问槽模板中的 b 表行数据
- flask - 将视频从网络服务器上的 Raspberry Pi 流式传输到多个用户
- c# - 在 asp 核心中使用装饰器发送通知的最佳实践
- machine-learning - 主题建模 - 如何从单个主题中获取不同的子主题
- spring-boot - 除了在 Spring Boot 中尝试 catch 块之外,还有其他方法可以处理 SQL 错误吗?
- html - 具有捕获和接受属性的 HTML 文件输入控件
- javascript - 使用 Express.js 启用 CORS 以允许多个端口进行通信
- widget - Outlook 应用程序级别的修改,在小部件和 Outlook on-click 之间建立连接