代码之家  ›  专栏  ›  技术社区  ›  TheArtilleryGuy1

R:基于多个列的最高日期对数据框进行子集

  •  1
  • TheArtilleryGuy1  · 技术社区  · 2 年前

    我有一个大致如下的大法框架:

    Location          Date         code     total_cases   total_vaccinations
    Afghanistan       2022-04-23     NA          5.00               NA
    Afghanistan       2022-04-22     3           3.00                2
    Afghanistan       2022-04-21     2           3.00               NA
    Albania           2022-04-24     3           9.00               NA
    Albania           2022-04-23     NA          9.00               NA
    Albania           2022-04-22     5           7.00               NA
    Albania           2022-04-21     7           3.00               NA
    Bolivia           2022-04-24     2           NA                  1
    Bolivia           2022-04-23     3           3.00                0
    ........
    

    我的问题是试图创建一个新的数据框架,其中将包含每个国家一次,每行将包含最新的值*如果可用的话,它不是NA*。对于上表,结果应如下所示:

    Location          Date      code     total_cases   total_vaccinations
    Afghanistan   2022-04-23     3           5.00                2
    Albania       2022-04-24     3           5.00                NA
    Bolivia       2022-04-24     2           3.00                1
    

    到目前为止,我试过:

      new_data <- main_data %>%
      group_by(Location) %>%
      arrange(desc(Date)) %>%
      filter(date==max(Date))
    

    但这不管用。将感谢任何帮助。

    1 回复  |  直到 2 年前
        1
  •  2
  •   PaulS    2 年前

    一个可能的解决方案,基于 tidyverse :

    library(tidyverse)
    
    df %>% 
      group_by(Location) %>% 
      arrange(Date) %>% 
      fill(-Date, .direction="down") %>% 
      slice_max(Date) %>% 
      ungroup
    
    #> # A tibble: 3 × 5
    #>   Location    Date        code total_cases total_vaccinations
    #>   <chr>       <chr>      <int>       <dbl>              <int>
    #> 1 Afghanistan 2022-04-23     3           5                  2
    #> 2 Albania     2022-04-24     3           9                 NA
    #> 3 Bolivia     2022-04-24     2           3                  1