我有一个如下所示的数据框:
> df<-data.frame(A=c(NA,1,2,3,4),B=c(NA,5,2,6,4),C=c(NA,NA,2,NA,NA))
> df
A B C
1 NA NA NA
2 1 5 NA
3 2 2 2
4 3 6 NA
5 4 4 NA
我想使用此df的行值来创建第4个“D”列,基于以下两个条件:1)如果行中的所有值都相同(不包括NA),则指定“与D列相同的“价值; 2)如果值不同,则将A列中的值分配给D列。这将创建一个如下所示的矢量和数据框:
> df$D<-c(NA,1,2,3,4)
> df
A B C D
1 NA NA NA NA
2 1 5 NA 1
3 2 2 2 2
4 3 6 NA 3
5 4 4 NA 4
答案 0 :(得分:3)
以下内容应该有效(使用@flodel建议的修改示例):
df <- rbind(df,c(NA,5,5))
apply(df,1,function(x) {y<-x[!is.na(x)];if(length(unique(y))==1) unique(y) else x[1]})
1 2 3 4 5 6
NA 1 2 3 4 5
答案 1 :(得分:1)
根据@James的回答,我相信
apply(df,1,function(x) if(anyDuplicated(x)) x[which.min(is.na(x))] else x[1])
如果列数很大,可能会快一些。