用R语言按日期匹配两个表。表1有firmid1和date1,表2有firmid2,date2,a。要去表2里面找到firmid1在date1之后3个月内的a的平均值
时间: 2024-05-11 11:15:20 浏览: 107
假设表1名为df1,表2名为df2,可以按照如下步骤进行匹配:
1. 将date1转换为日期格式,并新增一个date1_3m列表示date1之后3个月的日期:
```
df1$date1 <- as.Date(df1$date1)
df1$date1_3m <- df1$date1 + months(3)
```
2. 将date2转换为日期格式,并筛选出在date1之后3个月内的数据:
```
df2$date2 <- as.Date(df2$date2)
df2_sub <- df2[df2$firmid2 %in% df1$firmid1 & df2$date2 >= df1$date1 & df2$date2 <= df1$date1_3m, ]
```
3. 按照firmid2和date2分组,计算a的平均值:
```
df2_avg <- aggregate(df2_sub$a, by = list(firmid2 = df2_sub$firmid2, date2 = df2_sub$date2), FUN = mean)
```
4. 匹配回表1中的firmid1和date1,将平均值添加到df1中:
```
df1$avg_a <- sapply(1:nrow(df1), function(i) {
match_row <- df2_avg$firmid2 == df1$firmid1[i] & df2_avg$date2 == df1$date1[i]
if (any(match_row)) {
return(df2_avg$`mean_a`[match_row])
} else {
return(NA)
}
})
```
最终得到的df1数据框中,每行对应的avg_a列即为所求的平均值。
阅读全文