我一直在尝试按一个人的最近日期对下面的数据进行排序,然后只保留具有最近日期的行。
df <- data.frame (Person = c("Alex", "Alex", "Beth", "Beth"),
Date = c("01JAN2021", "15JUL2022", "31DEC2020", "15MAR2020"))
我运行了下面的代码,但意识到它没有正确排序,因为它只是按数字顺序直接读取字符串,然后按字母顺序读取。
df_updated <- df %>%
group_by(Person) %>%
arrange(desc(Date)) %>%
filter(row_number()==1)
当我意识到这不起作用时,我尝试查找代码以按索引分解值,以便创建日、月和年列。我遇到了 strsplit() 和 sub(),但两者都无法工作。我还尝试了 as.POSIX* 函数,但我找不到文档中涵盖的日期类型。我想一旦我可以将其转换为日期格式,我就可以正确排序,然后对最近的日期进行分组和过滤。
您可以使用
as.Date(x, format = "%d%B%Y")
将字符串转换为日期,然后使用 slice_max()
包中的 dplyr
获取最新条目。
df <- data.frame (Person = c("Alex", "Alex", "Beth", "Beth"),
Date = c("01JAN2021", "15JUL2022", "31DEC2020", "15MAR2020"))
df$Date <- as.Date(df$Date, format = "%d%B%Y")
df_updated <- df %>%
group_by(Person) %>%
slice_max(order_by = Date)
结果:
> df_updated
# A tibble: 2 × 2
# Groups: Person [2]
Person Date
<chr> <date>
1 Alex 2022-07-15
2 Beth 2020-12-31