r语言 - 根据条件连接 data.table 中的列名



这就是我的data.table的样子。最右边的列PASTE是我想要的列。

library(data.table) 
    dt <- fread('
    A      B     C      PASTE
    TRUE  FALSE TRUE    A,C   
    TRUE  TRUE  TRUE    A;B;C
    FALSE TRUE  FALSE   B
    FALSE FALSE FALSE   
    ')

我正在尝试通过连接所有列名来创建列PASTE,只要该列的该行中的值为 TRUE。

这是我的尝试:

dt[,PASTE:= if(dt[,c(1:3),with=FALSE] == TRUE, paste(names(dt), sep= ";"),"")]
我们可以按

行,unlist Data.table 的子集 ( .SD (,数据集名称的子集,将元素paste在一起并分配给 ( := ( 给 'newCol'

nm1 <- names(dt)[-4]
dt[, newCol := toString(nm1[unlist(.SD)]) ,by = 1:nrow(dt),.SDcols = nm1]

或者另一种选择是melt为"长"格式,然后执行联接

dt[melt(dt[, n := seq_len(.N)], id.var = c("n", "PASTE"))[,
               toString(variable[value]), n], on = "n"]

最新更新