这就是我的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"]