1

次のようなデータフレームで行 a、b、および c を折りたたもうとしています。

>df1 = data.frame(a=c(1,1,0,NA,NA,NA,NA,NA,NA),b=c(NA,NA,NA,0,1,1,NA,NA,NA),c=c(NA,NA,NA,NA,NA,NA,1,0,1)) 
   a  b  c
1  1 NA NA
2  1 NA NA
3  0 NA NA
4 NA  0 NA
5 NA  1 NA
6 NA  1 NA
7 NA NA  1
8 NA NA  0
9 NA NA  1

行 d に、次のようなデータフレームを作成します。

   a  b  c d
1  1 NA NA 1
2  1 NA NA 1
3  0 NA NA 0
4 NA  0 NA 0
5 NA  1 NA 1
6 NA  1 NA 1
7 NA NA  1 1
8 NA NA  0 0
9 NA NA  1 1

ありとあらゆる助けをいただければ幸いです。

4

3 に答える 3

4

これはどう...

df1$d <- apply( df1 , 1 , max , na.rm=TRUE )
df1$d
# [1] 1 1 0 0 1 1 1 0 1

明らかに、これは、各行に1OR aがあることを前提としています。0両方ある場合は、常に 1 が選択されます。

これは、投稿したデータが与えられた場合にも機能します。

df1[!is.na(df1)]
# [1] 1 1 0 0 1 1 1 0 1
于 2013-05-13T22:24:39.597 に答える
2

別のRベースソリューションが使用していますrowSums

> transform(df1, d=rowSums(df1, na.rm=TRUE))
   a  b  c d
1  1 NA NA 1
2  1 NA NA 1
3  0 NA NA 0
4 NA  0 NA 0
5 NA  1 NA 1
6 NA  1 NA 1
7 NA NA  1 1
8 NA NA  0 0
9 NA NA  1 1

または直接df1$d <- rowSums(df1, na.rm=TRUE)

于 2013-05-13T23:12:58.920 に答える