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

如何在R中按日期以cbind方式合并含缺失数据的两组数据集

用R合并两个带缺失数据的数据集(按日期时间匹配)

首先得明确:cbind()在这里并不适用——它是单纯按行的位置绑定列,而你的两个数据集行不对应(数据集2缺少3/1/01和4/1/01的记录),强行用cbind会导致数据完全错位,根本达不到按日期匹配的效果。

正确的做法是用merge()函数,它能根据指定的匹配键(这里是Date和time)对齐两个数据集,自动处理缺失行,把匹配到的heatlost和weight列插入到数据集1中,缺失的位置会用NA填充,正好符合你的需求。

具体步骤:

1. 先把你的数据转换成R数据框

先模拟读入你给出的两个数据集:

# 数据集1
df1 <- data.frame(
  Date = c("1/1/01", "2/1/01", "3/1/01", "4/1/01", "5/1/01", "6/1/01", "7/1/01"),
  time = c("0300", "0800", "0300", "0600", "0800", "0300", "0800"),
  Range = c("31km", "30km", "33km", "32km", "28km", "35km", "31km"),
  Waterconsumption = c("2.0liters", "1.8liters", "1.7liters", "1.8liters", "1.7liters", "1.6liters", "1.8liters"),
  stringsAsFactors = FALSE
)

# 数据集2
df2 <- data.frame(
  Date = c("1/1/01", "2/1/01", "5/1/01", "6/1/01", "7/1/01"),
  time = c("0300", "0800", "0800", "0300", "0800"),
  heatlost = c(0.27, 0.33, 0.69, 0.15, 0.63),
  weight = c("61.5kg", "62.0kg", "61.7kg", "61.8kg", "62.0kg"),
  stringsAsFactors = FALSE
)

2. 使用merge()按日期时间匹配合并

指定by = c("Date", "time")作为匹配键,设置all.x = TRUE来保留数据集1的所有行,只匹配数据集2中对应的记录:

merged_df <- merge(df1, df2, by = c("Date", "time"), all.x = TRUE)

3. 查看合并结果

运行后得到的merged_df就是你想要的格式:

print(merged_df)
#>     Date time Range Waterconsumption heatlost weight
#> 1 1/1/01 0300  31km        2.0liters     0.27 61.5kg
#> 2 2/1/01 0800  30km        1.8liters     0.33 62.0kg
#> 3 3/1/01 0300  33km        1.7liters       <NA>   <NA>
#> 4 4/1/01 0600  32km        1.8liters       <NA>   <NA>
#> 5 5/1/01 0800  28km        1.7liters     0.69 61.7kg
#> 6 6/1/01 0300  35km        1.6liters     0.15 61.8kg
#> 7 7/1/01 0800  31km        1.8liters     0.63 62.0kg

可以看到heatlost和weight已经正确插入到Waterconsumption列之后,缺失的记录用NA填充,完全符合你的需求。

为什么不能用cbind()?

再强调一次:cbind()只看行的位置,不管内容是否匹配。比如它会把数据集2的第3行(5/1/01的记录)绑定到数据集1的第3行(3/1/01的记录),直接导致数据错位,这显然不是你想要的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:22:05