总结以前的矢量值
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)))
我有这样的矢量:
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
.
我们可以使用 rowCumsums
来自 matrixStats
library(matrixStats)
df[-1] <- rowCumsums(as.matrix(replace(df[-1], is.na(df[-1]), 0)))