2

次のようなデータフレームがあります。

> df<-data.frame(A=c(NA,1,2,3,4),B=c(NA,5,NA,3,4),C=c(NA,NA,NA,NA,4))
> df
   A  B  C
1 NA NA NA
2  1  5 NA
3  2 NA NA
4  3  3 NA
5  4  4  4

df の行の値に基づいて "D" 列を作成しようとしています。ここで、行の値が異なる場合 (行 2) またはすべての NA (行 1) の場合、D は NA を取得し、 NA を除いて、その行の値が同じ場合 (行 3、4、5)。これにより、次のようなベクターとデータフレームが生成されます。

> df$D<-c(NA,NA,2,3,4)
> df
   A  B  C  D
1 NA NA NA NA
2  1  5 NA NA
3  2 NA NA  2
4  3  3 NA  3
5  4  4  4  4

ご提案いただきありがとうございます。

4

2 に答える 2

6

を使用apply()して各行の計算を行い、次に および を使用できunique()ます!is.na()。NAではない値を!is.na()選択します。unique()一意の値を取得してから、一意の値の数を取得しlength()ます。number が 1 の場合は最初の非 NA 値を使用し、そうでない場合は NA を使用します。

df$D<-apply(df,1,function(x) 
  ifelse(length(unique(x[!is.na(x)]))==1,x[!is.na(x)][1],NA)) 
于 2013-07-20T14:03:17.567 に答える