我有兴趣在R中合并两个数据帧。我想通过日期和第二个ID变量合并它们。例如,创建两个具有一些但不完全重叠的数据帧(df1和df2):
df1 <- data.frame(ID=c(rep(1,5),rep(2,3),rep(3,7)),
Date=c(seq( as.Date("2011-07-01"), by=1, len=5),
seq( as.Date("2011-07-01"), by=1, len=3),
seq( as.Date("2011-07-01"), by=1, len=7)))
df2 <- data.frame(ID=c(rep(1,3),rep(2,2),rep(3,7)),
Date=c(seq( as.Date("2011-07-01"), by=1, len=3),
seq( as.Date("2011-07-01"), by=1, len=2),
seq( as.Date("2011-07-01"), by=1, len=7)),
var=c(rep(12,3),rep(5,2),rep(9,7)))
收率:
> df1
ID Date
1 1 2011-07-01
2 1 2011-07-02
3 1 2011-07-03
4 1 2011-07-04
5 1 2011-07-05
> df2
ID Date var
1 1 2011-07-01 12
2 1 2011-07-02 12
3 1 2011-07-03 12
4 2 2011-07-01 5 , etc..
我想要等同于join_all(type =&#34; full&#34;)或merge(all = TRUE),以便在无法重叠时出现NA。我希望匹配具有等效ID和日期的案例。
> df3
ID Date var
1 1 2011-07-01 12
2 1 2011-07-02 12
3 1 2011-07-03 12
4 1 2011-07-04 NA
5 1 2011-07-05 NA, etc.
谢谢!
答案 0 :(得分:1)
好像你想要这样的东西,
> merge(df1, df2, by=c("ID", "Date"), all = TRUE)
ID Date var
1 1 2011-07-01 12
2 1 2011-07-02 12
3 1 2011-07-03 12
4 1 2011-07-04 NA
5 1 2011-07-05 NA
6 2 2011-07-01 5
7 2 2011-07-02 5
8 2 2011-07-03 NA
9 3 2011-07-01 9
10 3 2011-07-02 9
11 3 2011-07-03 9
12 3 2011-07-04 9
13 3 2011-07-05 9
14 3 2011-07-06 9
15 3 2011-07-07 9
答案 1 :(得分:0)
merge
是一个有用的基函数。但也建议看一下dplyr
包。相当肯定你会很快碰到它。
library(dplyr)
left_join(df1,df2)
# Joining by: c("ID", "Date")
# ID Date var
# 1 1 15156 12
# 2 1 15157 12
# 3 1 15158 12
# 4 1 15159 NA
# 5 1 15160 NA
# 6 2 15156 5
# 7 2 15157 5
# 8 2 15158 NA
# 9 3 15156 9
# 10 3 15157 9
# 11 3 15158 9
# 12 3 15159 9
# 13 3 15160 9
# 14 3 15161 9
# 15 3 15162 9