R data.table多列正负值拆分:求基于SDcols的批量实现方案
data.table多列批量按符号拆分实现方案
核心实现代码
library(data.table) # 你的原始数据,这里用示例数据演示 DT = data.table(x = c(-1,-2,1,3), z = c(-1,-1,-1,-1)) # 1. 定义需要拆分的列,可根据你的需求灵活调整 # 示例:取所有列,也可以用grep匹配特定规则的列,比如process_cols = grep("^your_prefix", names(DT), value = T) process_cols = names(DT) # 2. 基于SDcols批量生成正负拆分列 DT_new = copy(DT)[, c(outer(process_cols, c("pos", "neg"), paste, sep = "_")) := lapply(.SD, function(col) { list( pos = fifelse(col > 0, col, 0), neg = fifelse(col < 0, abs(col), 0) ) }), .SDcols = process_cols]
效果验证
运行后DT_new的输出完全符合需求:
x z x_pos x_neg z_pos z_neg 1: -1 -1 0 1 0 1 2: -2 -1 0 2 0 1 3: 1 -1 1 0 0 1 4: 3 -1 3 0 0 1
说明
- 这里用data.table内置的
fifelse代替基础ifelse,大数据量场景下运算效率更高 - 仅需调整
process_cols的列筛选逻辑即可适配上百列的批量处理需求,不需要逐个列编写拆分规则 - 代码不会修改原始DT,生成独立的DT_new对象,不会影响原始数据
内容的提问来源于stack exchange,提问作者plausibly_exogenous
相关产品推荐
相关产品推荐

