【问题标题】:New column value based on matching previous values in different columns基于匹配不同列中先前值的新列值
【发布时间】:2022-06-30 00:03:34
【问题描述】:

我无法在我的数据框中根据不同列中的匹配日期生成新列:

df 看起来像这样:

ID        date  booked.date   weather
 1  2016-12-01           NA    clouds
 1  2016-12-02   2014-10-24     sunny           
 1  2016-12-03           NA  overcast         
 2  2016-12-01   2015-12-24    clouds           
 2  2016-12-02   2016-12-01     sunny
 2  2016-12-03   2016-12-01  overcast
 2  2016-12-04   2016-01-13     sunny

date 表示入住公寓的日期,booking_date 告诉我们公寓的预订时间。 现在我想添加一个列booked_weather,如果此信息包含在df 中,则表示预订期间的天气。 输出将如下所示:

ID        date  booked.date   weather booked_weather
 1  2016-12-01           NA    clouds             NA
 1  2016-12-02   2014-10-24     sunny             NA
 1  2016-12-03           NA  overcast             NA
 2  2016-12-01   2015-12-24    clouds             NA
 2  2016-12-02   2016-12-01     sunny         clouds
 2  2016-12-03   2016-12-01  overcast         clouds
 2  2016-12-04   2016-01-13     sunny             NA

请注意,有多个公寓 ID 的读数,因此相同天气的重复日期。

这是我尝试过的,并不能完全满足我的需要:

df %>%
  mutate(weather_booked = case_when(
    booked.date %in% date ~ weather[booked.date]
  ))

我明白为什么这不会给我正确的结果,但我不知道如何解决它。

【问题讨论】:

    标签: r lag


    【解决方案1】:

    您可以使用“自连接”来完成此操作,将修改后的数据子集连接回自身。

    df %>%
      select(booked.date, weather) %>%
      rename(date = booked.date, booked_weather = weather) %>%
      right_join(df, by = "date")
    

    【讨论】:

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