从数据框中选择具有相同列的行

时间:2013-01-18 20:51:56

标签: r dataframe

我有一个包含多个列的数据框。 我想选择没有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),])

但是这会创建一个我希望避免的中间数据框(以节省内存)。

2 个答案:

答案 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) )