【问题标题】:R matching two columns in the same data.frameR匹配同一data.frame中的两列
【发布时间】:2013-01-18 21:43:53
【问题描述】:

如何将同一数据框中的两列合并为一列,一个简单的例子是:

a <- data.frame(id = 1:3, v1 = c('a', NA, NA), v2 = c(NA, 'b', 'c'))
a
  id  v1   v2
   1  a   <NA>
   2 <NA>  b
   3 <NA>  c

我需要的输出是这样的:

a
  id  v1   v2   v3
   1  a   <NA>   a
   2 <NA>  b     b
   3 <NA>  c     c

我找到了一个类似的帖子join matching columns in a data.frame or data.table,但我自己的情况无法弄清楚,请帮忙,谢谢

【问题讨论】:

    标签: r


    【解决方案1】:

    不清楚你想要什么。如果v1v2 的值不同会怎样?

    这个方法会优先选择v1的值

    a <- data.frame(id = 1:4, v1 = c('a', NA, NA,'d'), v2 = c(NA, 'b', 'c','e'))
    
    a <- as.data.table(a)
    a[,v3 := v1]
    a[is.na(v1), v3 := v2]
    

    使用传统的data.frame 方法:

    a$v3 <- as.character(a$v1)
    a[is.na(a$v1),"v3"] <- as.character(a[is.na(a$v1),"v2"])
    

    【讨论】:

      【解决方案2】:

      嗯,ifelse() 可能吗?

      > a <- data.frame(id = 1:3, v1 = c('a', NA, NA), v2 = c(NA, 'b', 'c'),
                        stringsAsFactors=FALSE)
      > a$v3 <- ifelse(is.na(a$v1), a$v2, a$v1)
      > a
        id   v1   v2 v3
      1  1    a <NA>  a
      2  2 <NA>    b  b
      3  3 <NA>    c  c
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多