【问题标题】:R using ignoring NA's when using uniqueR在使用唯一时使用忽略NA
【发布时间】:2014-09-02 21:06:08
【问题描述】:

我正在尝试根据列值中的相似性来查找/丢弃行,并具有以下示例代码:

vec1 <- c("B","D","E","NA")    
vec2 <- c("B","D","E","NA")    
vec3 <- c("B","C","E","NA")    
vec4 <- c("B","D","E","NA")    
vec5 <- c("B","NA","E","E")    
vec6 <- c("B","NA","NA","NA")

mat1 <- cbind(vec1,vec2,vec3,vec4,vec5,vec6)
mat1
     vec1 vec2 vec3 vec4 vec5 vec6
[1,] "B"  "B"  "B"  "B"  "B"  "B" 
[2,] "D"  "D"  "C"  "D"  "NA" "NA"
[3,] "E"  "E"  "E"  "E"  "E"  "NA"
[4,] "NA" "NA" "NA" "NA" "E"  "NA"

rows = apply(mat1, 1, function(i) length(unique(i)) > 1 )
mat2 <- mat1[rows, ]
     vec1 vec2 vec3 vec4 vec5 vec6
[1,] "D"  "D"  "C"  "D"  "NA" "NA"
[2,] "E"  "E"  "E"  "E"  "E"  "NA
[3,] "NA" "NA" "NA" "NA" "E"  "NA"

如何更改上面的代码来实现这一点?在unique 的帮助文件中,它建议有一个incomparables 参数,这是否已实现并且可以使用吗?我不一定希望删除 NA 只是忽略它们。

【问题讨论】:

  • rows = apply(mat1, 1, function(i) length(unique(i[!(i=="NA")]))&gt;1)
  • 那么你有一个值为“NA”的字符还是你有一个合适的 R NA 值? vec1 &lt;- c("B","D","E","NA")vec1 &lt;- c("B","D","E",NA) 非常不同
  • 我有一个值为 NA 的角色。
  • @Vlo 您的评论非常有效,谢谢。您可以将其添加为答案吗?

标签: r unique na


【解决方案1】:

来自上面的评论

rows = apply(mat1, 1, function(i) length(unique(i[!(i=="NA")]))&gt;1)

【讨论】:

  • 是的,如果你想做坏事,当然可以。当其中一个 ID 为 AN 时会发生什么?
【解决方案2】:

您需要正确输入它们,is.na 才能正常工作。目前它们是字符串,NA 已归类为我们可以分配NA_character_ 以确保安全。 另外,我会推荐summary 这里有一些表格可以获取您需要的信息。

length(unique(...))本质上是table

> mat1[is.na(mat1)]  
# character(0)  ## not good 
> mat1[mat1 == "NA"] <- NA_character_
> mat1[is.na(mat1)]  ## notice the difference...
# [1] NA NA NA NA NA NA NA NA

 > summary(mat1)
   vec1     vec2     vec3     vec4     vec5     vec6  
 B   :1   B   :1   B   :1   B   :1   B   :1   B   :1  
 D   :1   D   :1   C   :1   D   :1   E   :2   NA's:3  
 E   :1   E   :1   E   :1   E   :1   NA's:1           
 NA's:1   NA's:1   NA's:1   NA's:1       

> apply(mat1, 2, function(x) length(table(x)))
vec1 vec2 vec3 vec4 vec5 vec6 
   3    3    3    3    2    1 

> as.table(t(mat1))
     A B C D
vec1 B D E  
vec2 B D E  
vec3 B C E  
vec4 B D E  
vec5 B   E E
vec6 B                   

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-20
    • 2016-08-02
    相关资源
    最近更新 更多