R中列的行值比较

时间:2014-01-20 16:54:59

标签: r dataframe

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

    > df<-data.frame(A=c(1,1,2,3,NA,NA),B=c(NA,5,2,6,4,8),C=c(NA,NA,2,NA,NA,8))
    > df
       A  B  C
    1  1 NA NA
    2  1  5 NA
    3  2  2  2
    4  3  6 NA
    5 NA  4 NA
    6 NA  8  8

我想根据以下3个条件使用此数据框中的行值创建第4个“D”列:1)如果行中只有一个值,则将该值分配给D列; 2)如果行中的所有值都相同(不包括NA),则将“相同”值分配给列D; 2)如果行中的任何值不同(不包括NA),则将NA分配给列D.这将创建一个如下所示的向量和数据框:

    > df$D<-c(1,NA,2,NA,4,8)
    > df
       A  B  C  D
    1  1 NA NA  1
    2  1  5 NA NA
    3  2  2  2  2
    4  3  6 NA NA
    5 NA  4 NA  4
    6 NA  8  8  8

1 个答案:

答案 0 :(得分:2)

也许这样的事情对你有用:

apply(df, 1, function(y) {
  A <- unique(na.omit(y))
  ifelse(length(A) > 1, NA, A)
})
# [1]  1 NA  2 NA  4  8

我认为这应该满足您的条件,或者至少给您一个如何开始的提示。