【发布时间】:2015-03-29 03:18:52
【问题描述】:
我有一个合并的数据集,如下所示:
V3 V1.x V2.x V1.y V2.y V982 V2163
1 10075 Whitten Jamie L. 1225 <NA> NA 2 2
2 10421 Yates Sidney R. 1252 Yates Sidney R. 1252 2 0
3 10520 Gonzalez Henry B. 445 Gonzalez Henry B. 445 0 0
4 10573 Brown George E.Jr. 134 Brown George E.Jr. 134 0 0
5 29584 <NA> NA Cubin Barbara 254 0 0
我通过匹配 V3 合并了两个数据集。如您所见,两个数据集都有 V1 和 V2 变量,这两个变量并不相同。
我有两个问题。
1) 有什么方法可以在不生成 V1.x V1.y 的情况下合并两个数据集?我的意思是我想知道是否有任何方法可以让 V1 看起来像这样
V1
Whitten Jamie L.
Yates Sidney R.
Gonzalez Henry B.
Brown George E.Jr.
Cubin Barbara
我使用了简单的合并命令,例如merge(df1, df2, by=c("V3")。
2) 如果没有 V1.x 和 V1.y 就无法合并这两个数据集,那么如何折叠 NA 并合并这两列?
我在论坛中搜索了其他问题,找到了类似的命令
cbind(data[1], mycol = na.omit(unlist(data[-1])))
na.omit(stack(df))
或df2<-apply(df,1,function(x) x[!is.na(x)])。但它们都不能很好地工作。当我没有 V982 V3 或 V2163 等不相关的列时,这些命令似乎有效。我不知道如何通过将 NA 与维护其他列(如 V982 V2163 等)合并来合并这两列。
感谢您的帮助!
【问题讨论】:
-
您的最终数据集是否应该只有
V3、V982和V2163?或者应该是V3V1.x、V1.y、V982和V2163,然后是V2.x和V2.y的组合,这样来自一个的NAs与NA一起归档另一个? -
也许你想要
merge(df1, df2, by=c("V3","V1")? -
@MaratTalipov,这行不通(首先,因为您缺少
),)因为那样您将失去那些在V1或<NA>上拥有NA或<NA>的人V2(如果您要将V2添加到您的by语句中。 -
@AndrewTaylor,说得好。
-
那么
df$V1 <- with(df,ifelse(is.na(V1.x),V1.y,V1.x))呢?