R语言实现数据框多列同时批量取倒数的通用方法
R数据框批量对多列取倒数的通用方法
你不需要逐列写赋值语句,以下几种方案都可以实现一次性对l3到l5列取倒数,只需要修改目标列参数即可复用到其他类似场景:
- base R 无依赖方案
不需要安装任何第三方包,兼容性最强,适合所有R环境:
# 先定义要处理的目标列,支持列名、列位置索引两种写法 # 写法1:指定列名 target_cols <- c("l3", "l4", "l5") # 写法2:连续列用位置索引,示例中l3是第4列、l5是第6列,可直接写 target_cols <- 4:6 # 批量计算倒数并赋值回原数据框 df[target_cols] <- lapply(df[target_cols], function(col) 1 / col)
- dplyr 简洁写法(适配tidyverse工作流)
如果日常用tidyverse生态的函数,用across可以更灵活地选择列,支持连续列缩写、按条件选列等规则:
library(dplyr) df <- df %>% mutate( # l3:l5 直接选中从l3到l5的所有连续列 across(l3:l5, ~ 1 / .x) ) # 其他选列规则参考: # 非连续列:across(c(l2, l4, l7), ~1/.x) # 所有数值型列:across(where(is.numeric), ~1/.x)
- data.table 高性能方案(适合大数据量场景)
处理百万行以上级别的大表时,data.table的原地赋值写法速度更快、内存占用更低:
library(data.table) setDT(df) # 批量更新目标列,不生成多余数据副本 df[, (l3:l5) := lapply(.SD, function(col) 1/col), .SDcols = l3:l5]
校验方式:运行完代码后可执行
head(df)查看结果,原l3-l5列的1-10序列会被替换为对应的倒数值。
内容的提问来源于stack exchange,提问作者RPlotter
相关产品推荐
相关产品推荐

