You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用循环计算dataframe中按列递进的行累积和?

高效实现行逐步累积和并添加新列

你需要为按泳道存储基因表达数据的dataframe添加新列,每行从第2列开始逐步累加后续列的和,手动使用apply()效率极低,这里提供两种高效实现方式:

方法1:基础R内置函数实现

无需循环,直接通过行累积和提取所需结果:

# 提取数值列(排除第一列的基因名)
num_cols <- df[, -1]
# 计算每行的累积和并转置为列格式
row_cumsums <- t(apply(num_cols, 1, cumsum))
# 提取目标累积值:去掉第一列(对应单独c2的值),保留从2到3、2到4、2到5的和
new_cols <- row_cumsums[, -1]
# 设置新列名,匹配需求格式
colnames(new_cols) <- paste0("sum.2.", 3:ncol(df))
# 合并新列到原dataframe
df_new <- cbind(df, new_cols)

方法2:matrixStats包实现(大数据集首选)

针对超大数据集,matrixStats包的rowCumsums是高度优化的向量化函数,性能远优于apply():

# 安装并加载包(首次使用需安装)
# install.packages("matrixStats")
library(matrixStats)

# 将数值列转为矩阵格式
num_cols <- as.matrix(df[, -1])
# 计算行累积和
row_cumsums <- rowCumsums(num_cols)
# 提取目标列并重命名
new_cols <- row_cumsums[, -1]
colnames(new_cols) <- paste0("sum.2.", 3:ncol(df))
# 合并结果
df_new <- cbind(df, new_cols)

验证结果

运行后得到的df_new与手动计算结果完全一致:

> df_new
  c1 c2 c3 c4 c5 sum.2.3 sum.2.4 sum.2.5
1 G1  5  3  6  6       8      14      20
2 G2  3  7  3  4      10      13      17
3 G3  1  1  4  3       2       6       9

内容的提问来源于stack exchange,提问作者sam donato

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 11:10:53