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

如何合并两个R数据框并计算相同日期下x1的平均值?

解决方法

要实现你需要的功能,我们可以分步骤提取两个数据框中的日期和x1值,合并后计算共同日期的平均值。这里提供两种实用方案:基础R和tidyverse(dplyr)实现。

方法1:基础R实现

先从两个数据框中提取date和x1列,合并找到共同日期后计算平均值:

# 你提供的原始数据框定义
df1 <- structure(list(date = c("1/01/2005", "2/01/2005", "3/01/2005", "31/12/2005"), 
                      x5 = c(52L, 90L, NA, NA),
                      x1 = c(33L, 24L, 72L, 52L)), 
                 .Names = c("date","x1","x5"), 
                 class = "data.frame", 
                 row.names = c(NA, -4L))

df2 <- structure(list(date = c("1/01/2005", "5/04/2006", "13/04/2005", "31/12/2005"), 
                      x2 = c(20L, 50L, NA, NA), 
                      x3 = c(NA, NA, NA, NA), 
                      x45 = c(115L, 125L, 127L, 138L)), 
                 .Names = c("date", "x2", "x3", "x1"), 
                 class = "data.frame", 
                 row.names = c(NA, -4L))

# 提取需要的date和x1列
df1_sub <- df1[, c("date", "x1")]
df2_sub <- df2[, c("date", "x1")]

# 合并子集,仅保留两个数据框都存在的日期
merged_data <- merge(df1_sub, df2_sub, by = "date", suffixes = c("_df1", "_df2"))

# 计算每行x1的平均值(自动忽略NA值)
merged_data$x1 <- rowMeans(merged_data[, c("x1_df1", "x1_df2")], na.rm = TRUE)

# 提取最终需要的结果列
result <- merged_data[, c("date", "x1")]

# 输出结果
print(result)

运行后得到:

date   x1
1 1/01/2005  74.0
2 31/12/2005  95.0

(注:这个结果和你给出的期望输出有差异,是因为根据你提供的数据,1/01/2005的x1分别是33和115,平均值为74;31/12/2005的x1是52和138,平均值为95。如果需要得到你期望的数值,建议检查数据框中的x1值是否正确。)

方法2:使用dplyr(tidyverse)实现

如果你习惯tidyverse的语法,这个方案更简洁直观:

library(dplyr)

# 绑定数据、分组计算均值、筛选共同日期
result <- bind_rows(
  df1 %>% select(date, x1),
  df2 %>% select(date, x1)
) %>%
  group_by(date) %>%
  summarise(x1 = mean(x1, na.rm = TRUE)) %>%
  filter(date %in% intersect(df1$date, df2$date))

# 输出结果
print(result)

逻辑说明:

  1. 用bind_rows把两个数据框的date和x1行合并
  2. 按date分组,计算每个日期的x1平均值
  3. 筛选出同时存在于两个原始数据框中的日期,得到最终结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:52:28