2017-02-13 2 views
1

So sieht meine data.table aus. Die rechte Spalte PASTE ist meine gewünschte Spalte.Verknüpfen Sie die Spaltennamen in data.table auf Basis der Bedingungen.

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 
    ') 

Ich versuche, die Spalte PASTE durch Verketten alle Spaltennamen solange der Wert in dieser Zeile für diese Spalte zu erstellen TRUE ist.

Dies ist mein Versuch:

dt[,PASTE:= if(dt[,c(1:3),with=FALSE] == TRUE, paste(names(dt), sep= ";"),"")] 
+0

Auch bezogen werden: http://stackoverflow.com/questions/30102847/r-combining-columns-to-string-based-on-logical-match – Frank

Antwort

2

Wir sind von den Reihen, unlist, die Subset von Data.table (.SD), Teilmenge, die Namen des Datensatzes grouo können paste die Elemente zusammen und ordnen (:=) zu

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

Oder eine andere Option 'NEWCOL' ist melt zu " lange‘Format und dann trete ein

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

Vielen Dank für Deine Antwort! – gibbz00

Verwandte Themen