R:根据多列的最高日期对数据框进行子集化
R: Subset a data frame based on higest date for multiple columns
我有一个大法相框,大概是这样的:
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 *。对于上面的 table 结果应该是这样的:
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))
但这不起作用。愿意提供任何帮助。
可能的解决方案,基于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
我有一个大法相框,大概是这样的:
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 *。对于上面的 table 结果应该是这样的:
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))
但这不起作用。愿意提供任何帮助。
可能的解决方案,基于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