总结以前的矢量值

Summarizing previous vector values

我有这样的矢量:

 X2             X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 X16 X17 X18 X19 X20 X21 X22 X23 X24   X25
2 M. VERSTAPPEN 18 25 18 19 25  0 26  25  26   3   2  NA  25   2  18  18  25  25  20  19  18  26 395.5

我想创建包含所有先前分数摘要的新向量,例如:

X3 X4 X5
18 43 61

等 我尝试过类似的操作,但没有用。

ve <- c()
for(i in 3:25){
  ve <- append(paste0("X",i+1))
  stats %>% 
    mutate(ve[i] =(stats[,i]+stats[,i-1]))
}

也许cumsum就是你想要的东西

df[-1] <- t(apply(df[-1],1,cumsum))

我不确定您是否有数据框或矢量。从您尝试的代码看来,您正在处理数据框。如果您在 reproducible format

中提供数据,则更容易提供帮助

数据

stats <- structure(list(X2 = "M.VERSTAPPEN", X3 = 18L, X4 = 25L, X5 = 18L, 
    X6 = 19L, X7 = 25L, X8 = 0L, X9 = 26L, X10 = 25L, X11 = 26L, 
    X12 = 3L, X13 = 2L, X14 = NA, X15 = 25L, X16 = 2L, X17 = 18L, 
    X18 = 18L, X19 = 25L, X20 = 25L, X21 = 20L, X22 = 19L, X23 = 18L, 
    X24 = 26L, X25 = 395.5), class = "data.frame", row.names = "2")

cumsum 函数会有帮助。

cols <- paste0('X', 3:25)
vec <- unlist(stats[cols])
stats[cols] <- cumsum(replace(vec, is.na(vec), 0))
stats

#            X2 X3 X4 X5 X6  X7  X8  X9 X10 X11 X12 X13 X14 X15 X16 X17
#2 M.VERSTAPPEN 18 43 61 80 105 105 131 156 182 185 187 187 212 214 232

#  X18 X19 X20 X21 X22 X23 X24   X25
#2 250 275 300 320 339 357 383 778.5

由于数据中有 NA 个值,我在取 cumsum.

时将其替换为 0

我们可以使用 rowCumsums 来自 matrixStats

library(matrixStats)
df[-1] <-  rowCumsums(as.matrix(replace(df[-1], is.na(df[-1]), 0)))