假设我有一个这样的数据框:
df=data.frame("A"=factor(c(1,2,1,4,2)), "date"=factor(c("1999","2000","1999","2001","2001")), "value"=c(10,20,30,40,50))
如果它们具有相同的“ A”和“日期”,则需要对“值”列中的值求和。 所以我需要的是这样的数据框:
dfnew=data.frame("A"=factor(c(1,2,1,4,2)), "date"=factor(c("1999","2000","1999","2001","2001")), "value"=c(10,20,30,40,50), "sum"=c(40,20,40,40,50))
我可以循环执行此操作,但是由于我的数据集很大,所以速度很慢。有什么方法可以更快地做到这一点?
答案 0 :(得分:2)
使用dplyr,您可以简单地执行以下操作:
library(dplyr)
df %>% group_by(date,A) %>% mutate(Sum = sum(value))
# A tibble: 5 x 4
# Groups: date, A [4]
A date value Sum
<fct> <fct> <dbl> <dbl>
1 1 1999 10 40
2 2 2000 20 20
3 1 1999 30 40
4 4 2001 40 40
5 2 2001 50 50
答案 1 :(得分:2)
我们可以使用data.table
library(data.table)
setDT(df)[, sum := sum(value), .(date, A)]
或与base R
df$sum <- with(df, ave(value, A, date, FUN = sum))
答案 2 :(得分:2)
基本的R解决方案:
aggregate(value ~ A + date, data=df, sum)
A date value
1 1 1999 40
2 2 2000 20
3 2 2001 50
4 4 2001 40