【问题标题】:Concatenate column names in data.table based on conditions [duplicate]根据条件连接 data.table 中的列名[重复]
【发布时间】:2017-07-01 18:29:56
【问题描述】:

这就是我的 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= ";"),"")]

【问题讨论】:

标签: r data.table dplyr lapply


【解决方案1】:

我们可以按行分组,unlistData.table 的子集 (.SD),子集数据集的名称,paste 元素一起并将 (:=) 分配给 'newCol'

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

或者另一个选项是 melt 到 'long' 格式,然后进行连接

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

【讨论】:

    猜你喜欢
    • 2020-09-16
    • 2016-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-23
    • 2018-09-24
    • 1970-01-01
    • 2015-04-29
    相关资源
    最近更新 更多