我有一个包含多个列的数据框。
我想选择没有NA
s的行(与complete.cases
一样)
和所有列相同。
例如,
> f <- data.frame(a=c(1,NA,NA,4),b=c(1,NA,3,40),c=c(1,NA,5,40))
> f
a b c
1 1 1 1
2 NA NA NA
3 NA 3 5
4 4 40 40
我希望向量TRUE,FALSE,FALSE,FALSE
仅选择第一行,因为所有3列都相同且没有NA
。
我能做到
Reduce("==",f[complete.cases(f),])
但是这会创建一个我希望避免的中间数据框(以节省内存)。
答案 0 :(得分:1)
试试这个:
R > index <- apply(f, 1, function(x) all(x==x[1]))
R > index
[1] TRUE NA NA FALSE
R > index[is.na(index)] <- FALSE
R > index
[1] TRUE FALSE FALSE FALSE
答案 1 :(得分:0)
最佳(IMO)解决方案来自David Winsemius:
which( rowSums(f==f[[1]]) == length(f) )