-3

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

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

我在 data.frame 或 data.table 中找到了类似的 post join 匹配列,但我无法用我自己的情况弄清楚,请帮忙,谢谢

4

2 回答 2

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"])
于 2013-01-18T22:09:00.950 回答
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
于 2013-01-18T22:12:49.663 回答