我有一个数据框(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(),但我认为这不会有帮助。欢迎您的建议,一如既往:)
非常感谢!
答案 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)
。