我不確定這個任務是否屬于self join。我基本上是想在下面的資料框中查找每個的最新日期,其中每個State.UnionTerritory的Daily_confirmed案例都是 <=當前 Date 的一半。
這將幫助我獲得每個日期每個州的案件翻倍時間。
library(tidyverse)
library(lubridate)
df_ind <- read_csv("https://raw.githubusercontent.com/johnsnow09/covid19-df_stack-code/main/sample_data.csv")
df_ind %>% head()
# output
Date State.UnionTerritory Daily_confirmed
<date> <chr> <dbl>
1 2021-12-23 Haryana 46
2 2021-12-23 Maharashtra 1179
3 2021-12-23 Delhi 118
4 2021-12-22 Haryana 55
5 2021-12-22 Maharashtra 1201
6 2021-12-22 Delhi 125
例如,Delhi有118案例2021-12-23,德里的案例少于或一半即將到來57,2021-12-15因此翻倍率將是 2021-12-23- 2021-12-15= 8 天。
所以我應該得到類似的東西:

這應該適用于資料中的每個州和所有日期。
df_ind <- df_ind %>%
mutate(Daily_confirmed_half = as.integer(Daily_confirmed / 2) )
我不知道我究竟怎么可以試試這個得到適當的日期作為Doubling_Date其中列Daily_confirmed案件的值滿足條件<= half。
我可以group summarize&first用來提取最新日期,但不確定在此資料框的另一列中引入正確日期的有效方法是什么。
uj5u.com熱心網友回復:
我不確定這是否是您想要的輸出。該方法使用full_joinwithfilter來模擬 dplyr 中的非等式連接。然后我們進行一些資料清理,在最后一步中,我們需要left_join對原始資料進行處理,因為有很多天我們無法計算倍增日期,因為它不包含在時間序列中。
library(tidyverse)
library(lubridate)
df_ind %>%
group_by(State.UnionTerritory) %>%
full_join(., ., by = c("State.UnionTerritory")) %>%
filter(Date.x > Date.y,
Daily_confirmed.x > (Daily_confirmed.y * 2)) %>%
group_by(Date.x, State.UnionTerritory) %>%
filter(Date.y == max(Date.y)) %>%
filter(Daily_confirmed.y == max(Daily_confirmed.y)) %>%
rename("Date" = Date.x,
"Daily_confirmed" = Daily_confirmed.x,
"Doubling_Date" = Date.y) %>%
select(- Daily_confirmed.y) %>%
mutate(Day_to_double = Date - Doubling_Date) %>%
left_join(df_ind,
.,
by = c("Date", "State.UnionTerritory", "Daily_confirmed")) %>%
arrange(State.UnionTerritory, desc(Date))
#> # A tibble: 252 x 5
#> Date State.UnionTerritory Daily_confirmed Doubling_Date Day_to_double
#> <date> <chr> <dbl> <date> <drtn>
#> 1 2021-12-23 Delhi 118 2021-12-15 8 days
#> 2 2021-12-22 Delhi 125 2021-12-15 7 days
#> 3 2021-12-21 Delhi 102 2021-12-14 7 days
#> 4 2021-12-20 Delhi 91 2021-12-14 6 days
#> 5 2021-12-19 Delhi 107 2021-12-14 5 days
#> 6 2021-12-18 Delhi 86 2021-12-13 5 days
#> 7 2021-12-17 Delhi 69 2021-12-13 4 days
#> 8 2021-12-16 Delhi 85 2021-12-13 3 days
#> 9 2021-12-15 Delhi 57 2021-11-27 18 days
#> 10 2021-12-14 Delhi 45 2021-11-15 29 days
#> # … with 242 more rows
由reprex 包(v0.3.0)于 2021 年 12 月 25 日創建
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/393445.html
上一篇:按組選擇倒數第二個日期并改變新列
