在R中,如果站点和日期在两个数据帧中匹配,则从第一个数据帧中提取行值



我有两个数据帧,它们都有site IDDate列。第一个数据帧(df1)有连续的日期,还包括与每个日期相关联的温度测量(Temp.)。第二个数据帧(df2)具有每个site ID达到最高温度时的Date。我想要的是有一个R代码,确定df2中的site IDDate是否与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中,那么您将得到TempNA

如果你想做一个内部连接,只在每个数据框中找到匹配的日期,你可以删除这个

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

最新更新