我有一个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时应用unique()。 na.rm,na.omit等似乎不起作用。我觉得我错过了一些非常简单的事情......
谢谢!
答案 0 :(得分:25)
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)]))
给出
[1] "A" "B" "C"
答案 1 :(得分:12)
您在初始解决方案中非常非常接近。但正如Aniko所说,在使用unique之前,你不要删除NA
值。
我们首先创建一个类似的data.frame
,然后像你一样使用apply()
的例子 - 但是有一个额外的匿名函数,用于组合na.omit()
和{{1} }:
unique()