2013-01-18 54 views
-3

我怎样才能在combind相同的数据帧的两列合并到一列匹配两列,一个简单的例子是:中的R相同的data.frame

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,但我想不出它与我自己的情况,请大家帮帮忙,谢谢

回答

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 
+0

为什么我没有想到ifelse,非常感谢! – Rosa

2

目前尚不清楚你想要什么。如果v1v2有不同的值,会发生什么情况?

此方法将倾向于使用传统的data.frame方法的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] 

值:

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