3

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

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

4

2 回答 2

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
于 2013-01-18T20:57:35.767 回答
0

最好的(IMO)解决方案来自David Winsemius

which( rowSums(f==f[[1]]) == length(f) )
于 2013-01-20T16:23:16.440 回答