使用coalesce合并R数据框两列为一列时结果异常该如何处理
两列合并自定义coalesce函数失效的解决方法
你的自定义coalesce函数的逻辑本身没有问题,失效的核心原因是你数据框中x、y列的空白值不是R识别的NA类型,而是空字符串"",!is.na()判断逻辑会将空字符串判定为有效值,因此无法正确筛选出有值的列。
以下是几种可直接生效的解决方法:
- 方法1:先将空字符串转为
NA,再使用原自定义函数
先执行空值替换,再运行原有代码即可得到正确结果:
# 将数据框中所有空字符串转为NA df[df == ""] <- NA # 运行原有自定义函数 coalesce <- function(...) { apply(cbind(...), 1, function(x) { x[which(!is.na(x))[1]] }) } df$z <- coalesce(df$x, df$y)
- 方法2:使用dplyr包内置的
coalesce函数(更高效)
无需自定义函数,直接调用dplyr的官方实现,性能比自定义的apply版本更高,处理大数据集时优势更明显:
# 先转空为NA df[df == ""] <- NA # 调用内置函数 df$z <- dplyr::coalesce(df$x, df$y)
- 方法3:修改自定义函数的判断逻辑,兼容空字符串
如果不想修改原始数据的空值格式,可以直接调整函数内的判断条件,同时过滤空字符串和NA:
coalesce2 <- function(...) { apply(cbind(...), 1, function(x) { x[which(x != "" & !is.na(x))[1]] }) } df$z <- coalesce2(df$x, df$y)
内容的提问来源于stack exchange,提问作者D. Fowler
相关产品推荐
相关产品推荐

