【发布时间】:2014-04-06 11:19:04
【问题描述】:
继续我的问题:
1.Identifying whether a set of variables uniquely identifies each row of the data or not;
2.Tagging all rows that are duplicates in terms of a given set of variables,
我现在想根据给定的一组变量汇总/合并所有重复行,方法是取它们的总和。
解决方案 1:
有一些关于如何做到这一点的指导here,但是当有大量级别的变量构成索引时,推荐的ddply方法很慢,因为在这种情况下我试图用一组给定的变量标记所有重复项。
# Values of (f1, f2, f3, f4) uniquely identify observations
dfUnique = expand.grid(f1 = factor(1:16),
f2 = factor(1:41),
f3 = factor(1:2),
f4 = factor(1:104))
# sample some extra rows and rbind them
dfDup = rbind(dfUnique, dfUnique[sample(1:nrow(dfUnique), 100), ])
# dummy data
dfDup$data = rnorm(nrow(dfDup))
# aggregate the duplicate rows by taking the sum
dfDupAgg = ddply(dfDup, .(f1, f2, f3, f4), summarise, data = sum(data))
解决方案 2:
第二种解决方案是使用data.table,按照here的建议,我可以这样做
# data.table solution
indexVars = paste0('f', 1:4, sep = '')
dtDup = data.table(dfDup, key = indexVars)
dtDupAgg = dtDup[, list(data = sum(data)), by = key(dtDup)]
我有几个问题:
1.有没有办法让ddply版本更快?
2.data.table 正确吗?我想检查一下,因为我是 data.table 的新手。
【问题讨论】:
标签: r data.table plyr