从字符串 01JAN2021 创建日期

问题描述 投票:0回答:1

我一直在尝试按一个人的最近日期对下面的数据进行排序,然后只保留具有最近日期的行。

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* 函数,但我找不到文档中涵盖的日期类型。我想一旦我可以将其转换为日期格式,我就可以正确排序,然后对最近的日期进行分组和过滤。

r sorting date
1个回答
0
投票

您可以使用

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
© www.soinside.com 2019 - 2024. All rights reserved.