我试图根据列值中行的相似性查找/丢弃行,并具有以下示例代码:
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
,只是忽略它们。
发布于 2014-09-02 21:53:16
来自上面的评论
rows = apply(mat1, 1, function(i) length(unique(i[!(i=="NA")]))>1)
发布于 2014-09-02 21:44:30
您需要正确地输入它们才能使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
https://stackoverflow.com/questions/25632378
复制相似问题