【问题标题】:In R, if site and date match in two data frames, pull row values from first data frame在 R 中,如果站点和日期在两个数据框中匹配,则从第一个数据框中提取行值
【发布时间】:2021-02-02 20:37:09
【问题描述】:

我有两个数据框,它们都有 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 dataframe dplyr


    【解决方案1】:

    在基础 R 中,您可以使用 merge 函数进行左连接 (all.x = T),这会将所有日期保留在 df2 中,即使它们在 df1 中找不到。如果日期在df2,但不是df1,那么您将获得NATemp

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

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-03
      • 1970-01-01
      • 2021-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多