r中的ifelse匹配向量

时间:2013-07-19 18:42:22

标签: r if-statement

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

> 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

2 个答案:

答案 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])
如果列数很大,

可能会快一些。