提取月份和年份,忽略R列中的日期

sczxawaw  于 2023-03-15  发布在  其他
关注(0)|答案(3)|浏览(126)

我有一个数据框,其中一列名为“开始”,日期格式为“m/d/yyyy”,我想用它来创建一个只有“m/yyyy”的新列。我在这里看过其他问题,但大多数问题都不遵循这种格式,解决方案也不适用。
下面是我的原始数据列标题的示例:

> head(data$Start)
[1] "3/6/2023"  "3/6/2023"  "3/6/2023"  "3/6/2023"  "1/17/2023" "1/9/2023"

我尝试使用以下代码添加一个只包含月份和年份的新列:

data$MthYr <- format(as.Date(data$Start), "%m/%Y")

这将返回:

> head(data$MthYr)
[1] "06/0003" "06/0003" "06/0003" "06/0003" NA        "09/0001"

它看起来只是使用日作为月,月作为年,并添加前导零。如何修复此问题?

oknrviil

oknrviil1#

使用as.Date中的格式进行转换。使用的默认格式为%Y-%m-%d

format(as.Date(data$Start, "%m/%d/%Y"), "%m/%Y")
[1] "03/2023" "03/2023" "03/2023" "03/2023" "01/2023" "01/2023"

数据

data <- structure(list(Start = c("3/6/2023", "3/6/2023", "3/6/2023", 
"3/6/2023", "1/17/2023", "1/9/2023")), class = "data.frame", row.names = c(NA, 
-6L))
v6ylcynt

v6ylcynt2#

另一种方法是使用lubridate s floor_date()

library(dplyr)
library(lubridate)

data %>%
  mutate(MonthYear = mdy(Start) %>% 
           floor_date("month") %>% 
           format("%m/%Y")
         )
Start MonthYear
1  3/6/2023   03/2023
2  3/6/2023   03/2023
3  3/6/2023   03/2023
4  3/6/2023   03/2023
5 1/17/2023   01/2023
6  1/9/2023   01/2023
9q78igpj

9q78igpj3#

使用sub

> sub("(.*)/(.*)/(.*)", "\\1/\\3", data$Start)
[1] "3/2023" "3/2023" "3/2023" "3/2023" "1/2023" "1/2023"

相关问题