在R:
我不确定这个问题的正确标题是什么,所以也许有人可以帮助我。这将不胜感激。如果这被称为易于搜索的东西,我很抱歉。
所以我有一个参差不齐的数组矩阵(多个UPCS)
[upc] [quantity1] [quantity2] [sum1] [sum2]
[1] 123 11 3 NA NA
[2] 123 2 1 NA ...
[3] 789 5 3 NA
[4] 456 10 6 NA
[5] 789 6 2 NA NA
我希望矩阵由UPC求和,例如:
[upc] [quantity1] [quantity2] [sum1] [sum2]
[1] 123 11 3 13 4
[2] 123 2 1 13 4
[3] 789 5 3 11 5
[4] 456 10 6 10 6
[5] 789 6 2 11 5
感谢您的时间和帮助。
诀窍是需要以最有效的方式完成,因为它会多次完成。
答案 0 :(得分:2)
如果这些是data.frame
,通常的方法是使用aggregate
函数将相同的函数应用于相同的分组变量,但它的行为不像ave
和返回更短的结果。我怀疑它没有使用data.table
,dplyr函数或Rcpp方法那么快。
aggregate( df[ , 2:3], df[1], sum)
这将是data.table:
的方式library(data.table)
dt <- data.table(df)
setkey(dt, "upc")
# To show you what the inner expression would return
dt[, lapply(.SD, sum), by="upc"]
#-----------
upc quantity1 quantity2
1: 123 13 4
2: 456 10 6
3: 789 11 5
#-----------
dt[ dt[, lapply(.SD, sum), by="upc"] ] # It is a self join operation
upc quantity1 quantity2 quantity1.1 quantity2.1
1: 123 11 3 13 4
2: 123 2 1 13 4
3: 456 10 6 10 6
4: 789 5 3 11 5
5: 789 6 2 11 5
然后返回效率较低的data.frame方法....将第一个参数放在源列中,你将merge
by upc:
> merge(df, aggregate( df[ , 2:3], df[1], sum), by="upc")
upc quantity1.x quantity2.x quantity1.y quantity2.y
1 123 11 3 13 4
2 123 2 1 13 4
3 456 10 6 10 6
4 789 5 3 11 5
5 789 6 2 11 5