3

複数の列を持つデータ フレームがあります。NAs のない行 (のように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,FALSE3 つの列はすべて同じであり、1 つもないため、最初の行だけを選択するベクトルが必要です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 に答える