R通过NA组合两个数据帧

时间:2014-02-14 10:58:58

标签: r join merge dataframe

我有一个数据框(DF),喜欢在第一列中组合两列,方法是将第一列中的NA替换为第二列中的值。以下是DF的示例:

structure(list(A = structure(c(3L, 5L, 4L, 2L, 1L, NA, NA, NA, 
NA, NA), .Label = c("five", "four", "one", "three", "two"), class = "factor"), 
B = structure(c(4L, NA, NA, 2L, NA, 6L, 5L, 1L, 3L, 7L), .Label = c("eight", 
"four", "nine", "one", "seven", "six", "ten"), class = "factor")), .Names = c("A", 
"B"), row.names = c(NA, -10L), class = "data.frame")

正如您所看到的,DF包含两列中从1到10的数字。

我希望A列中的NAs替换为B列中的值。但只有A的NA!

我试过了:

X$A[is.na(X$A)] <- X$B[is.na(X$A)]

但是这给了我一个无效的因子级错误警告。

我发现的解决方案主要处理merge()或paste(),但我认为这不会有帮助。欢迎您的建议,一如既往:)

非常感谢!

1 个答案:

答案 0 :(得分:2)

问题在于您使用因素。这应该有效:

X$A <- as.character(X$A)
X$B <- as.character(X$B)
X$A[is.na(X$A)] <- X$B[is.na(X$A)]

如果您想在修改数据之前避免data.frame()函数将所有内容转换为因子,请使用stringsAsFactors = FALSE选项。例如:data.frame(apply(X, 2, as.character), stringsAsFactors = F)