如何在data.table中通过列名向量批量拼接多列内容
用data.table通过列名向量拼接多列成新字符列
方法1:do.call + .SD实现批量拼接
这是data.table原生的高效写法,适合批量处理大量列:
library(data.table) mydata <- data.table(a = "here", b = 1, c = "example") mycols <- names(mydata)[1:3] # 核心代码 mydata[, d := do.call(paste0, .SD), .SDcols = mycols]
.SD代表当前分组下的数据子集,.SDcols指定要参与拼接的列(即你的列名向量)do.call(paste0, .SD)会自动把.SD中的每一列作为单独参数传给paste0,实现逐行拼接所有指定列的内容
方法2:用purrr::reduce逐列拼接
如果你熟悉tidyverse工具链,也可以用reduce来迭代拼接列:
library(purrr) mydata[, d := reduce(.SD, paste0), .SDcols = mycols]
你的尝试失败原因
get(mycols)报错:get()仅支持单个字符参数,无法接收列名向量,因此提示"first argument has length > 1"eval(paste0("get(",mycols,")"))报错:该代码会生成三个独立的向量(对应三列),paste0处理后返回3个值,但你要赋值给1列,导致长度不匹配
内容的提问来源于stack exchange,提问作者Jakob
相关产品推荐
相关产品推荐

