【问题标题】:R: How to remove the day from a date? [duplicate]R:如何从日期中删除日期? [复制]
【发布时间】:2020-08-15 08:55:24
【问题描述】:

我在 df 列中有一堆日期,格式如下:dd.mm.yyyy

我希望它看起来像这样:01/2020 (mm.yyyy)

如何从所有日期中删除日期?

【问题讨论】:

标签: r data-mining


【解决方案1】:

使用format 指定您想要的日期格式

date <- as.Date("13/01/2020", format = "%d/%m/%Y")
format(date, "%m/%Y")
[1] "01/2020"

编辑 - 应用于数据框列

dates <- c("13/01/2020", "17/02/2015", "13/03/2013")
df <- data.frame(dates, stringsAsFactors = FALSE)
df$dates <- as.Date(df$dates, format = "%d/%m/%Y")
df$dates_format <- format(df$dates, "%m/%Y")
df
       dates dates_format
1 2020-01-13      01/2020
2 2015-02-17      02/2015
3 2013-03-13      03/2013

【讨论】:

  • 我在列中有很多不同的日期,所以这段代码只更改匹配 2020 年 1 月 1 日的日期,有没有办法让它适用于列中的所有日期??跨度>
  • @sjoelly - 是的,见编辑
【解决方案2】:

R 中有明确的日期格式选项(请参阅 Greg 的回答)。另一种选择是将日期分成 3 列,然后重新组合月份和年份,在其间放置 /。请注意,这会将新的日期列保留为字符格式,您可能需要根据需要进行更改。

library(tidyr)
df <- data.frame(date = "13/01/2020")
df <- separate(df, date, into = c("day","month","year"), sep = "/")
df$newdate <- paste(df$month, df$year, sep = "/")

【讨论】:

  • 格雷格的答案应该是公认的答案。 sub 和 separate 选项只是其他方法。
【解决方案3】:

这是使用lubridate 的解决方案。

library(lubridate)

#Set the desired format (mm-yyyy) as my_stamp
my_stamp<-stamp( "02-2019", 
                 orders = "my") 

#A df with a column full of dates
df <- data.frame(dates = c("30/04/2020","29/03/2020","28/02/2020"))

#Change the column from string to date format
df$dates<-dmy(df$dates)

#Apply the format you desire to the dates (i.e., only month and year)
df$dates<-my_stamp(df$dates)

#    dates
#1 04-2020
#2 03-2020
#3 02-2020

【讨论】:

    【解决方案4】:

    除了format by @Greg,另一种选择是使用sub,如下所示

    > sub(".*?/","","13/01/2020")
    [1] "01/2020"
    

    【讨论】:

    • 为什么在处理日期时应该使用字符串操作/正则表达式?
    • @mnist 只是显示所需结果的另一种方式,虽然它不是“日期”类型...
    • 我在列中有一堆不同的日期,不仅是 13/01/2020,我怎样才能使代码适用于列中的所有日期?抱歉,我的问题没有说清楚
    • 当我们可以使用格式时,这对我来说似乎有点矫枉过正。可能仍然对 OP 有帮助
    • @sjoelly 你可以试试sub(".*?/","",df$date)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-19
    • 1970-01-01
    • 2022-11-05
    • 1970-01-01
    • 2014-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多