Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为数据帧中的每一行计算R中的条件运行和_R - Fatal编程技术网

为数据帧中的每一行计算R中的条件运行和

为数据帧中的每一行计算R中的条件运行和,r,R,我想创建一个等于data$Rating的运行总和的列,因为第3列和第4列中有两个条件为真,具体来说,data$Year%group\u by(ID)%>%arrange(Year)%>%mutate(cumSum=cumSum(Rating)-Rating)是一个ID可以在同一年内多次出现,因此请改进您的示例数据集/所需输出保存更新的示例,以证明ID可以在一年内多次出现 year <- 2014 # maximum year to include in cumsum ID.values &

我想创建一个等于data$Rating的运行总和的列,因为第3列和第4列中有两个条件为真,具体来说,data$Year<当前年份,data$ID等于当前ID

换言之,这应计算截至前一年每个id的累计评级总和。它应该为数据帧中的每一行(大约50000行)执行此操作。考虑到数据帧的大小,如果可能的话,我不希望循环

我在下面提供了一个简短的例子来说明这一点

> head(data[,c(3,4,13)])
  Year        ID        Rating  CumSum
1 2010        13578     2       0
2 2010        13579     1       0
3 2010        13575     3       0
4 2011        13575     4       3
5 2012        13578     3       2    
6 2012        13579     2       1
7 2012        13579     4       1
我有电子表格的背景,所以我仍在考虑SUMIFS等(这将很好地解决我在Excel中的问题),如果语言不精确,我深表歉意

data <- data.frame(Year = c( rep(2010, 3), 2011, rep(2012, 3) ),
                   ID = c(13578, 13579, 13575, 13575, 13578, 13579, 13579),
                   Rating = c(2, 1, 3, 4, 3, 2, 4))
data 

#   Year        ID        Rating  
# 1 2010        13578     2       
# 2 2010        13579     1       
# 3 2010        13575     3       
# 4 2011        13575     4       
# 5 2012        13578     3           
# 6 2012        13579     2       
# 7 2012        13579     4       
可以这样做

year <- 2014 # maximum year to include in cumsum
ID.values <- names(table(data$ID)) # get unique values of data$ID, sorted

# cumsum for 13575 rows, followed by cumsum for 13578 rows, ...
Rating.cumsum <- unlist(sapply(ID.values, 
                     function(x) cumsum(data$Rating[data$ID == x]))) 

# assign cumsum output to appropriate rows
data$cumsum[with(data, order(ID))] <- Rating.cumsum

year一个ID可以有两行具有相同的年份条目吗?如果没有,您可以尝试
library(dplyr);df%>%group\u by(ID)%>%arrange(Year)%>%mutate(cumSum=cumSum(Rating)-Rating)
是一个ID可以在同一年内多次出现,因此请改进您的示例数据集/所需输出保存更新的示例,以证明ID可以在一年内多次出现
year <- 2014 # maximum year to include in cumsum
ID.values <- names(table(data$ID)) # get unique values of data$ID, sorted

# cumsum for 13575 rows, followed by cumsum for 13578 rows, ...
Rating.cumsum <- unlist(sapply(ID.values, 
                     function(x) cumsum(data$Rating[data$ID == x]))) 

# assign cumsum output to appropriate rows
data$cumsum[with(data, order(ID))] <- Rating.cumsum