Обработка значений NA в применяется и уникальный

У меня есть 114 строк кадром данных на 16 столбцов, где строки являются людьми, и столбцы являются или своими именами или NA. Например, первые 3 строки похож на это:

            name name.1      name.2 name.3       name.4 name.5       name.6 name.7       name.8 name.9       name.10 name.11       name.12 name.13        name.14 name.15
1           <NA>   <NA>        <NA>   <NA>         <NA>   <NA>         <NA>   <NA>         <NA>   <NA>      Aanestad    <NA>      Aanestad    <NA>       Aanestad    <NA>
2           <NA>   <NA>        <NA>   <NA>         <NA>   <NA>         <NA>   <NA>     Ackerman   <NA>      Ackerman    <NA>      Ackerman    <NA>       Ackerman    <NA>
3           <NA>   <NA>        <NA>   <NA>         <NA>   <NA>      Alarcon   <NA>      Alarcon   <NA>       Alarcon    <NA>       Alarcon    <NA>           <NA>    <NA>

Я хочу генерировать список (если несколько уникальных имен на строку) или вектор (если только одно уникальное имя на строку) всех уникальных имен с длиной 114.

Когда я пробую apply(x,1,unique) Я добираюсь 2xNcol массив, где иногда первая ячейка строки является NA, и иногда вторая ячейка строки является NA.

    [,1]       [,2]       [,3]      [,4]     [,5]      [,6]      [,7]    [,8]   [,9]    
[1,] NA         NA         NA        NA       "Alquist" NA        "Ayala" NA     NA      
[2,] "Aanestad" "Ackerman" "Alarcon" "Alpert" NA        "Ashburn" NA      "Baca" "Battin"

Когда то, что я хотел бы, справедливо:

Aanestad
Ackerman
Alarcon
...

Я, может казаться, не выясняю, как подать заявку уникальный (), в то время как игнорирование NA. na.rm, na.omit и т.д., кажется, не работает. Я чувствую, что пропускаю что-то простое реальное...

Спасибо!

10
задан bshor 15 February 2010 в 21:51
поделиться

2 ответа

unique не имеет аргумента na.rm, но вы можете сами удалить недостающие значения перед его вызовом:

A <- matrix(c(NA,"A","A",
             "B", NA, NA,
              NA, NA, "C"), nr=3, byrow=TRUE)
apply(A, 1, function(x)unique(x[!is.na(x)]))

gives

[1] "A" "B" "C"
26
ответ дан 3 December 2019 в 13:51
поделиться

Вы были очень, очень близки к своему первоначальному решению. Но, как заметила Анико, вам нужно удалить значения NA , прежде чем вы сможете использовать unique.

Пример, в котором мы сначала создаем аналогичный data.frame , а затем используем apply () , как и вы, но с дополнительной анонимной функцией, которая используется для объединения na.omit () и unique () :

R> DF <- t(data.frame(foo=sample(c(NA, "Foo"), 5, TRUE), 
                      bar=sample(c(NA, "Bar"), 5, TRUE)))
R> DF
    [,1]  [,2] [,3]  [,4]  [,5] 
foo "Foo" NA   "Foo" "Foo" "Foo"
bar NA    NA   NA    "Bar" "Bar"
R> apply(DF, 1, function(x) unique(na.omit(x)))
  foo   bar 
"Foo" "Bar" 
14
ответ дан 3 December 2019 в 13:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: