在R的data.table中计算未知数量列间的增长率
解决方案
假设你的列顺序是从columnPred开始,依次是需要对比的列(如示例中的column1、column2),可以用以下方法批量计算相邻列的变化率:
基础实现(列顺序符合示例)
先获取所有列名,再遍历每一对相邻列计算变化率:
library(data.table) DT <- data.table("columnPred" = c(1,2,3), "column1" = c(7,8,9), "column2" = c(44,55,66)) # 获取所有列名 cols <- names(DT) # 遍历相邻列对,生成delta列 for (i in seq_len(length(cols) - 1)) { # 计算((前列/后列)-1)*100,赋值给delta{i} DT[, paste0("delta", i) := ((get(cols[i]) / get(cols[i+1])) - 1) * 100] }
运行后DT会自动生成delta1和delta2列,结果和你手动计算的完全一致。
灵活调整列顺序
如果columnPred不一定是第一列,可以先调整列的顺序,确保基准列在最前面:
# 把columnPred放在首位,其余列按原顺序跟上 cols <- c("columnPred", setdiff(names(DT), "columnPred")) DT <- DT[, ..cols] # 再执行上面的循环计算delta列 for (i in seq_len(length(cols) - 1)) { DT[, paste0("delta", i) := ((get(cols[i]) / get(cols[i+1])) - 1) * 100] }
说明
seq_len(length(cols)-1)生成1到列数减一的索引,确保只遍历到倒数第二列(因为要和下一列配对)paste0("delta", i)自动生成delta1、delta2这样的列名get(cols[i])用于通过列名字符串获取对应列的值,适配未知列名的场景
内容的提问来源于stack exchange,提问作者Nneka
相关产品推荐
相关产品推荐

