2015-12-23 2 views
6

У меня есть кадр данных dd2 с сотнями столбцов и что мне нужно сделать, вставьте все эти значения столбца вместе, опуская любые значения NA. Если я что-то вроде этогоКак опустить значения NA при одновременном вклеивании многочисленных значений столбцов?

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

это на самом деле включает в себя NA с, как "NA" строки. Я хочу этого избежать. Я мог бы также сделать так, как показано ниже, но это ожидало, что я буду работать для каждой отдельной колонки за раз, чтобы получить результат.

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

Есть ли эффективный способ сделать это? Вот образец данных:

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

Ваши данные выборки не 'data.frame'. С «dd2» вы просто пытаетесь вставить все столбцы, кроме первого? – A5C1D2H2I1M1N2O1R2T1

+0

@AnandaMahto Я хочу вставить отдельные значения столбцов вместе без каких-либо NA. Например, я хочу вставить 'dd2 [, wanted.columns]'. – MAPK

+1

Возможно, что-то вроде этого тоже будет работать: 'melt (as.data.table (dd2), measure.vars = c (" plant "," animal "), na.rm = TRUE) [, toString (value), by =. (sample_id, more)] '. – A5C1D2H2I1M1N2O1R2T1

ответ

6

Вы можете попробовать na.omit() опустить значения, а затем вставить. Кроме того, вы можете использовать toString(), так как это в основном paste(..., collapse = ", ").

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" 

Если у вас есть конкретные столбцы, которые вы используете, то

apply(dd2[, cols], 1, function(x) toString(na.omit(x))) 
Смежные вопросы