2015-12-23 2 views
6

Ich habe einen Datenrahmen dd2 mit Hunderten von Spalten, und was ich tun muss, ist, fügen Sie alle diese Spaltenwerte zusammen unter Auslassung aller NA Werte. Wenn ich etwas zu tun wie diesesWie kann man NA-Werte weglassen, wenn man mehrere Spaltenwerte zusammenfügt?

apply(a, 1, paste, collapse=",") 

es enthält tatsächlich NA s als "NA" String. Ich möchte das vermeiden. Ich könnte auch tun, wie unten gezeigt, aber das würde erwarten, dass ich für jede einzelne Spalte auf einmal arbeite, um das Ergebnis zu erhalten.

result <- cbind( 
    dd2, 
    combination = paste(dd2[,2], replace(dd2[,3], is.na(dd2[,3]), ""), sep = ",") 
) 

Gibt es einen effizienten Weg, es zu tun? Hier ist die Beispieldaten:

dd2 <- structure(c("A", "B", "C", "D", "E", "AK2", "HFM1", NA, "TRR", 
"RTT", NA, "PPT", "TRR", "RTT", NA, "PPT", NA, NA, "GGT", NA), .Dim = c(5L, 
4L), .Dimnames = list(NULL, c("sample_id", "plant", "animal", 
"more"))) 
+0

Ihre Beispieldaten ist kein 'data.frame'. Versuchen Sie mit "dd2" nur alle Spalten außer dem ersten zusammenzufügen? – A5C1D2H2I1M1N2O1R2T1

+0

@AnandaMahto Ich möchte ausgewählte Spaltenwerte einfügen und dabei alle NAs auslassen. Zum Beispiel möchte ich 'dd2 [, wanted.columns]' einfügen. – MAPK

+1

Vielleicht würde so etwas auch funktionieren: 'schmelzen (as.data.table (dd2), measure.vars = c (" Pflanze "," Tier "), na.rm = TRUE) [, toString (Wert), by =. (Beispiel_ID, mehr)] '. – A5C1D2H2I1M1N2O1R2T1

Antwort

6

Sie na.omit() könnten versuchen, die Werte weglassen, dann einfügen. Sie können auch toString() verwenden, da es im Grunde paste(..., collapse = ", ") ist.

apply(dd2, 1, function(x) toString(na.omit(x))) 
# [1] "A, AK2, PPT"  "B, HFM1, PPT"  "C, TRR"   
# [4] "D, TRR, RTT, GGT" "E, RTT" 

Wenn Sie bestimmte Spalten haben Sie verwenden dann

apply(dd2[, cols], 1, function(x) toString(na.omit(x))) 
Verwandte Themen