如何根据收集数据的日期从 Dataframe 中删除整行?

z31licg0  于 2023-01-06  发布在  其他
关注(0)|答案(3)|浏览(98)

假设我有这个示例 Dataframe (但要大得多)

df = data.frame(ID_number = c(111,111,111,22,22,33,33),
                date = c('2021-06-14','2021-06-12','2021-03-11',
                         '2021-05-20','2021-05-14',
                         '2018-04-20','2017-03-14'),
                answers = 1:7,
                sex = c('F','M','F','M','M','M','F') )

产出

ID_number       date  answers sex
1       111 2021-06-14       1   F
2       111 2021-06-12       2   M
3       111 2021-03-11       3   F
4        22 2021-05-20       4   M
5        22 2021-05-14       5   M
6        33 2018-04-20       6   M
7        33 2017-03-14       7   F

我们可以看到有7个不同的成员,但是创建 Dataframe 的成员犯了错误,将相同的ID_number分配给成员1、2和3。将相同的ID_number分配给成员4和5,等等......
在数据框中有每个成员的数据集合的数据,我希望只保留日期最早的成员。

ID_number       date   answers sex
1       111 2021-03-11       3   F
2        22 2021-05-14       5   M
3        33 2017-03-14       7   F

感谢你的帮助。

pw9qyyiw

pw9qyyiw1#

您可以在min日期filter每个group_by如下:

library(dplyr)
df %>%
  group_by(ID_number) %>%
  filter(date == min(date))
#> # A tibble: 3 × 4
#> # Groups:   ID_number [3]
#>   ID_number date       answers sex  
#>       <dbl> <chr>        <int> <chr>
#> 1       111 2021-03-11       3 F    
#> 2        22 2021-05-14       5 M    
#> 3        33 2017-03-14       7 F

创建于2023年1月4日,使用reprex v2.0.2

pgky5nke

pgky5nke2#

使用slice_min

library(dplyr)
df %>% 
  group_by(ID_number) %>% 
  slice_min(date)

在开发版本中,您可以使用.by的内联分组:

devtools::install_github("tidyverse/dplyr")
df %>% 
  slice_min(date, .by = ID_number)
au9on6nz

au9on6nz3#

使用base R

subset(df, as.numeric(date) == ave(as.numeric(date), ID_number, FUN = min))
  ID_number       date answers sex
3       111 2021-03-11       3   F
5        22 2021-05-14       5   M
7        33 2017-03-14       7   F

相关问题