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

使用rbind合并数据框时如何避免日期列出现NA值?

解决R中rbind数据框时日期格式转换出现NA的问题

问题场景

有两个数据框需要按行绑定(rbind),但因日期格式不一致,转换日期时出现大量NA值,导致绑定后日期列全部失效。可复现代码如下:

# 1
rating <- 1:4
date <- c('2021-12-19', '2021-12-20', '2021-12-21', '2021-12-22')
name <- c('ABC', 'DEF', 'GHI', 'JKL')
title <- c('Manager', 'Accountant','QA','IT')
df1 <- data.frame(rating,date,name,title)
print(df1)

# 2
rating <- 1:4
date <- c('12/15/22', '12/16/22', '12/17/22', '12/18/22')
name <- c('MNO', 'PQR', 'STU', 'VWX')
title <- c('Cyber', 'Broker','D&T','IT')
df2 <- data.frame(rating,date,name,title)
print(df2)

# 错误的日期转换
df1$date <- as.Date(df1$date, format = "%d-%m-%y")
df2$date <- as.Date(df2$date, format = "%d-%m-%y")
both <- rbind(df1,df2)

print(both)

运行后输出的日期列全为<NA>,无法正常绑定。

错误原因

你使用了错误的日期格式匹配字符串:

  • df1的日期格式是YYYY-MM-DD,对应格式符应为%Y-%m-%d(%Y代表4位年份,%m代表2位月份,%d代表2位日期)
  • df2的日期格式是MM/DD/YY,对应格式符应为%m/%d/%y(%y代表2位年份)
    之前统一用%d-%m-%y(日-月-2位年)与两个数据框的日期格式都不匹配,因此转换失败生成NA。

解决方案

方法1:基础R原生函数(无需额外包)

针对每个数据框的日期格式,使用对应格式符转换:

# 正确转换df1的日期
df1$date <- as.Date(df1$date, format = "%Y-%m-%d")
# 正确转换df2的日期
df2$date <- as.Date(df2$date, format = "%m/%d/%y")
# 按行绑定
both <- rbind(df1, df2)

print(both)

运行后输出:

rating       date name      title
1      1 2021-12-19  ABC    Manager
2      2 2021-12-20  DEF Accountant
3      3 2021-12-21  GHI         QA
4      4 2021-12-22  JKL         IT
5      1 2022-12-15  MNO      Cyber
6      2 2022-12-16  PQR     Broker
7      3 2022-12-17  STU        D&T
8      4 2022-12-18  VWX         IT

方法2:使用lubridate包(更简洁直观)

lubridate包提供了专门的日期解析函数,无需手动写格式符:

library(lubridate)
library(dplyr)

# 解析df1的YYYY-MM-DD格式日期
df1 <- df1 %>% mutate(date = ymd(date))
# 解析df2的MM/DD/YY格式日期
df2 <- df2 %>% mutate(date = mdy(date))
# 按行绑定(bind_rows是dplyr中更健壮的rbind替代函数)
both <- bind_rows(df1, df2)

print(both)

该方法中:

  • ymd()自动识别年-月-日格式
  • mdy()自动识别月/日/年格式
  • bind_rows()比原生rbind()更灵活,能自动处理列名不一致等情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 19:35:24