R语言动态变量名问题:为矩阵列生成对应中位数列
解决方法
你原代码的问题在于eval(parse(text = ...))无法循环处理多列,只会返回单个列的中位数,导致所有新列都复用了同一个值。下面提供两种可靠的data.table实现方式:
方法一:用.SD批量处理(推荐)
这种方式更符合data.table的高效风格,适合批量处理多列:
# 指定要计算中位数的目标列 target_cols <- c("a1", "a2", "a3") # 生成对应的新列名 new_cols <- paste0(target_cols, "_median") # 批量计算并添加新列 data[, (new_cols) := lapply(.SD, median), .SDcols = target_cols]
.SD代表当前数据集中的子集,.SDcols用来指定要处理的列lapply(.SD, median)会对每个目标列单独计算中位数,data.table会自动将中位数标量广播到新列的所有行
方法二:循环逐个处理
如果更习惯逐列操作,也可以用循环实现:
target_cols <- c("a1", "a2", "a3") for (col in target_cols) { # 用get()获取列值,计算中位数后赋值给新列 data[, paste0(col, "_median") := median(get(col))] }
如果你的实际列名是f0_ltd到f4_ltd(和代码里的写法一致),只需要把target_cols改成paste0("f", 0:4, "_ltd")即可。
内容的提问来源于stack exchange,提问作者Tanja
相关产品推荐
相关产品推荐

