ifelse在R中的行相同

Joe*_*ger 2 if-statement r

我有一个如下所示的数据框:

> 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
Run Code Online (Sandbox Code Playgroud)

我试图基于df中的行值创建"D"列,其中如果行中的值不同(即行2)或所有NA(即行1),则D得到NA,并且如果该行中的值相同,则排除NAs(即行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
Run Code Online (Sandbox Code Playgroud)

提前感谢您的建议.

Did*_*rts 6

您可以使用apply()为每行进行计算,然后使用unique()!is.na().随着!is.na()您选择不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)) 
Run Code Online (Sandbox Code Playgroud)