我有两个数据帧,它们都有site ID
和Date
列。第一个数据帧(df1
)有连续的日期,还包括与每个日期相关联的温度测量(Temp.
)。第二个数据帧(df2
)具有每个site ID
达到最高温度时的Date
。我想要的是有一个R代码,确定df2
中的site ID
和Date
是否与df1
匹配,然后将df1
的相关温度值添加到df2
。
df1 <- data.frame(matrix(ncol = 3, nrow = 9))
x <- c("site ID", "Date", "Temp.")
colnames(df1) <- x
df1$`site ID` <- c("a","a","a",
"b","b","b",
"c","c","c")
df1$Date <- rep(seq(from = as.Date("2020-01-01"), to = as.Date("2020-01-03"), by = 1),3)
df1$Temp. <- c("10","12","11",
"20","15","10",
"2","4","6")
df2 <- data.frame(matrix(ncol = 2, nrow = 3))
y <- c("site ID", "Date")
colnames(df2) <- y
df2$`site ID` <- c("a","b","c")
df2$Date <- c(as.Date("2020-01-02"), as.Date("2020-01-01"), as.Date("2020-01-03"))
理想的输出如下所示:
site ID Date Temp.
1 a 2020-01-02 12
2 b 2020-01-01 20
3 c 2020-01-03 6
在基础R
中,您可以使用merge
函数进行左连接(all.x = T
),这将保留df2
中的所有日期,即使它们没有在df1
中找到。如果日期在df2
中,但不在df1
中,那么您将得到Temp
的NA
。
如果你想做一个内部连接,只在每个数据框中找到匹配的日期,你可以删除这个
merge(df2, df1, by = c("site ID", "Date"), all.x = T)
site ID Date Temp.
1 a 2020-01-02 12
2 b 2020-01-01 20
3 c 2020-01-03 6