我有一个如下所示的数据框:
> 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)
提前感谢您的建议.
您可以使用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)