R匹配同一data.frame中的两列

时间:2013-01-18 21:43:54

标签: r

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

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,但我无法用自己的案例弄清楚,请帮忙,谢谢

2 个答案:

答案 0 :(得分:2)

目前尚不清楚你想要什么。如果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"])

答案 1 :(得分:1)

嗯,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
相关问题