2017-02-13 16 views
1

これは私のdata.tableの外観です。一番右の列PASTEが私の希望する列です。条件に基づいてdata.tableの列名を連結する

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= ";"),"")] 
+0

も関連:http://stackoverflow.com/questions/30102847/r-combining-columns-to-string-based-on-logical-match – Frank

答えて

2

我々は、行によってgrouo Data.tableのunlistサブセット(.SD)、データセットの名前をサブセット、paste要素が一緒に割り当てることができます(:= )に 'ニューコール'

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"] 
+1

をいただき、ありがとうございますあなたの答え! – gibbz00

関連する問題