R 计算嵌套变量级别的累积和

R 计算嵌套变量级别的累积和,r,cumsum,R,Cumsum,我希望计算一个累积和变量,但是在给定嵌套变量的级别内计算。以下是一些示例数据: data <- data.frame(cbind(ids=c(rep(1,6),rep(2,4),rep(3,3)), values=c(1,5,2,7,3,5,1,6,2,4,1,6,3))) 谢谢 您可以使用ave: transform(data, cumsum = ave(values, ids, FUN = cumsum)) data # ids values cumsum #1 1

我希望计算一个累积和变量,但是在给定嵌套变量的级别内计算。以下是一些示例数据:

data <- data.frame(cbind(ids=c(rep(1,6),rep(2,4),rep(3,3)), values=c(1,5,2,7,3,5,1,6,2,4,1,6,3)))

谢谢

您可以使用
ave

transform(data, cumsum = ave(values, ids, FUN = cumsum))

data
#   ids values cumsum
#1    1      1      1
#2    1      5      6
#3    1      2      8
#4    1      7     15
#5    1      3     18
#6    1      5     23
#7    2      1      1
#8    2      6      7
#9    2      2      9
#10   2      4     13
#11   3      1      1
#12   3      6      7
#13   3      3     10
或使用dplyr

library(dplyr)
data %>% group_by(ids) %>% mutate(cumsum = cumsum(values))

您可以使用
ave

transform(data, cumsum = ave(values, ids, FUN = cumsum))

data
#   ids values cumsum
#1    1      1      1
#2    1      5      6
#3    1      2      8
#4    1      7     15
#5    1      3     18
#6    1      5     23
#7    2      1      1
#8    2      6      7
#9    2      2      9
#10   2      4     13
#11   3      1      1
#12   3      6      7
#13   3      3     10
或使用dplyr

library(dplyr)
data %>% group_by(ids) %>% mutate(cumsum = cumsum(values))

您可以使用
ave

transform(data, cumsum = ave(values, ids, FUN = cumsum))

data
#   ids values cumsum
#1    1      1      1
#2    1      5      6
#3    1      2      8
#4    1      7     15
#5    1      3     18
#6    1      5     23
#7    2      1      1
#8    2      6      7
#9    2      2      9
#10   2      4     13
#11   3      1      1
#12   3      6      7
#13   3      3     10
或使用dplyr

library(dplyr)
data %>% group_by(ids) %>% mutate(cumsum = cumsum(values))

您可以使用
ave

transform(data, cumsum = ave(values, ids, FUN = cumsum))

data
#   ids values cumsum
#1    1      1      1
#2    1      5      6
#3    1      2      8
#4    1      7     15
#5    1      3     18
#6    1      5     23
#7    2      1      1
#8    2      6      7
#9    2      2      9
#10   2      4     13
#11   3      1      1
#12   3      6      7
#13   3      3     10
或使用dplyr

library(dplyr)
data %>% group_by(ids) %>% mutate(cumsum = cumsum(values))

使用
数据应该更快。对于大型数据集,表

library(data.table) 
setDT(data)[, Cumsum:=cumsum(values), by=ids]
data
#      ids values Cumsum
 # 1:   1      1      1
#  2:   1      5      6
#  3:   1      2      8
#  4:   1      7     15
#  5:   1      3     18
#  6:   1      5     23
#  7:   2      1      1
#  8:   2      6      7
#  9:   2      2      9
# 10:   2      4     13
# 11:   3      1      1
# 12:   3      6      7
# 13:   3      3     10

使用
数据应该更快。对于大型数据集,表

library(data.table) 
setDT(data)[, Cumsum:=cumsum(values), by=ids]
data
#      ids values Cumsum
 # 1:   1      1      1
#  2:   1      5      6
#  3:   1      2      8
#  4:   1      7     15
#  5:   1      3     18
#  6:   1      5     23
#  7:   2      1      1
#  8:   2      6      7
#  9:   2      2      9
# 10:   2      4     13
# 11:   3      1      1
# 12:   3      6      7
# 13:   3      3     10

使用
数据应该更快。对于大型数据集,表

library(data.table) 
setDT(data)[, Cumsum:=cumsum(values), by=ids]
data
#      ids values Cumsum
 # 1:   1      1      1
#  2:   1      5      6
#  3:   1      2      8
#  4:   1      7     15
#  5:   1      3     18
#  6:   1      5     23
#  7:   2      1      1
#  8:   2      6      7
#  9:   2      2      9
# 10:   2      4     13
# 11:   3      1      1
# 12:   3      6      7
# 13:   3      3     10

使用
数据应该更快。对于大型数据集,表

library(data.table) 
setDT(data)[, Cumsum:=cumsum(values), by=ids]
data
#      ids values Cumsum
 # 1:   1      1      1
#  2:   1      5      6
#  3:   1      2      8
#  4:   1      7     15
#  5:   1      3     18
#  6:   1      5     23
#  7:   2      1      1
#  8:   2      6      7
#  9:   2      2      9
# 10:   2      4     13
# 11:   3      1      1
# 12:   3      6      7
# 13:   3      3     10

谢谢你的想法,初学者。但是,我从代码中得到了一条错误消息:get中的错误(as.character(FUN),mode=“function”,envir=envir):未找到模式“function”的对象“FUN”,如果我删除“FUN”(即数据$cumsum2转换(数据,cumsum=ave(值,id,FUN=cumsum))它将运行似乎工作得很好!非常感谢!感谢您的想法,初学者。我收到了一条关于该代码的错误消息,但是:get中的错误(as.character(FUN),mode=“function”,envir=envir):没有找到模式“function”的对象“FUN”,如果我删除“FUN”(即数据$cumsum2转换(数据,cumsum=ave(值,id,FUN=cumsum))它将运行似乎工作得很好!非常感谢!感谢您的想法,初学者。我收到了一条关于该代码的错误消息,但是:get中的错误(as.character(FUN),mode=“function”,envir=envir):没有找到模式“function”的对象“FUN”,如果我删除“FUN”(即数据$cumsum2转换(数据,cumsum=ave(值,id,FUN=cumsum))它将运行似乎工作得很好!非常感谢!感谢您的想法,初学者。我收到了一条关于该代码的错误消息,但是:get中的错误(as.character(FUN),mode=“function”,envir=envir):没有找到模式“function”的对象“FUN”,如果我删除“FUN”(即数据$cumsum2转换(数据,cumsum=ave(值,id,FUN=cumsum))它将运行看起来很好!非常感谢!除了更快或不更快,我认为它更容易使用除了更快或不更快,我认为它更容易使用除了更快或不更快,我认为它更容易使用除了更快或不更快,我认为它更容易使用