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

在R语言中如何合并两列:用非NA值填充另一列的NA值

合并数据框两列,用非NA值填充NA生成新列

这个需求其实很常见,针对你给出的数据框,我整理了两种R语言下的实现方案,都能快速得到目标结果:

先构造示例数据

首先我们先还原你的初始数据框(注意要把字符串转成日期类型,否则后续处理可能出问题):

df <- data.frame(
  date1 = as.POSIXct(c("2016-08-29 02:31:34", NA)),
  date2 = as.POSIXct(c(NA, "2016-08-29 17:59:23"))
)

方案1:用dplyr的coalesce函数(推荐)

dplyr包里的coalesce函数就是专门干这个的——它会逐行从多个向量中提取第一个非NA值,完全匹配你的需求,代码简洁还不会踩类型转换的坑:

library(dplyr)

df <- df %>%
  mutate(Newdate = coalesce(date1, date2))

方案2:Base R原生实现(无需额外包)

如果你不想加载第三方包,也可以用原生函数实现:

方法A:ifelse判断

# 先判断date1是否非NA,是就取date1,否则取date2
df$Newdate <- ifelse(!is.na(df$date1), df$date1, df$date2)
# 注意:ifelse会把日期转成数值,所以要再转回来
df$Newdate <- as.POSIXct(df$Newdate, origin = "1970-01-01")

方法B:apply逐行处理

# 逐行筛选非NA值
df$Newdate <- apply(df[, c("date1", "date2")], 1, function(x) x[!is.na(x)])
# 转成日期类型
df$Newdate <- as.POSIXct(df$Newdate)

最终结果

不管用哪种方法,运行后你都会得到目标数据框:

print(df)
# 输出:
#                 date1                date2              Newdate
# 1 2016-08-29 02:31:34                <NA> 2016-08-29 02:31:34
# 2                <NA> 2016-08-29 17:59:23 2016-08-29 17:59:23

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:19:39