0

我有一个看起来像这样的数据框:

> 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”列,基于以下 2 个条件: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
4

2 回答 2

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 
于 2013-07-19T19:10:03.853 回答
1

基于@James的回答,我相信

apply(df,1,function(x) if(anyDuplicated(x)) x[which.min(is.na(x))] else x[1])

如果列数很大,可能会快一点。

于 2013-07-19T19:29:30.713 回答