如何用data.table或R工具计算col1与其他数值列的绝对差?
用data.table实现每行col1与其他数值列的绝对差计算
嘿,这个需求用data.table来处理简直量身定做!我给你两种方案,你可以根据自己的列数多少来选:
方案一:直接手动定义计算(适合列数少的场景)
如果需要对比的列不多,直接逐列计算绝对差就行,语法非常直观:
require(data.table) # 先构造你提供的数据集 dt = as.data.table(iris[ names(iris) != 'Species' ])[1:26] dt[ , id := LETTERS ] setnames(dt, c('col1', 'col2', 'col3', 'col4', 'id')) # 直接生成新列 dt[, `:=`( col1_col2 = abs(col1 - col2), col1_col3 = abs(col1 - col3), col1_col4 = abs(col1 - col4) )] # 查看前5行结果 dt[1:5]
方案二:批量自动化处理(适合列数多的场景)
如果后续可能新增更多数值列,用批量处理的方式更省心,不用每次手动加新列:
require(data.table) # 同样先构造数据集 dt = as.data.table(iris[ names(iris) != 'Species' ])[1:26] dt[ , id := LETTERS ] setnames(dt, c('col1', 'col2', 'col3', 'col4', 'id')) # 第一步:确定需要和col1对比的目标列(排除col1和id) target_cols = setdiff(names(dt), c("col1", "id")) # 第二步:批量生成新列,列名格式为col1_原列名 dt[, paste0("col1_", target_cols) := lapply(.SD, function(x) abs(col1 - x)), .SDcols = target_cols] # 查看结果 head(dt)
两种方法最终都会生成你想要的col1_col2、col1_col3、col1_col4列,每行对应col1与对应列的绝对差值。
内容的提问来源于stack exchange,提问作者andschar
相关产品推荐
相关产品推荐

