You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R语言中从多列创建仅保留非NA值的变量(优先取首列非NA值)

解决方案

方法1:使用dplyr的coalesce()函数

这是最简洁的实现方式,coalesce()会严格按照传入列的顺序,返回每行第一个非NA的值,天然支持任意多列的场景:

library(dplyr)

name1 <- c("a", NA, "b")
name2 <- c(NA, "c", "d")
mydf <- cbind.data.frame(name1, name2)

# 添加目标结果列
mydf$result <- coalesce(mydf$name1, mydf$name2)

# 若需处理更多列,直接追加参数即可,例如:
# mydf$result <- coalesce(mydf$name1, mydf$name2, mydf$name3, mydf$name4)

运行后mydf$result会得到预期结果:"a", "c", "b"。

方法2:基础R原生实现(无需额外包)

如果不想加载第三方包,可以用apply()逐行处理,提取每行第一个非NA元素:

name1 <- c("a", NA, "b")
name2 <- c(NA, "c", "d")
mydf <- cbind.data.frame(name1, name2)

# 定义辅助函数:提取向量中第一个非NA值
first_non_na <- function(x) x[!is.na(x)][1]

# 应用到数据框的每一行
mydf$result <- apply(mydf, 1, first_non_na)

该方法同样适配任意多列的情况,会按数据框原有列的顺序查找第一个非NA值。

结果验证

两种方法最终得到的结果完全一致:

> mydf$result
[1] "a" "c" "b"

内容的提问来源于stack exchange,提问作者Muhammad Kamil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 15:54:14