【问题标题】:How to replace the days in a date object in R? [duplicate]如何替换 R 中日期对象中的日期? [复制]
【发布时间】:2020-08-01 10:00:49
【问题描述】:

我想将 R 中 Date 对象中的不同日期替换为所有对象的同一天。

举个例子吧。

date = structure(c(10961, 10990, 11018, 11046, 11060, 11088, 11116, 
11144, 11214, 11235, 11249, 11263, 11305, 11354, 11382, 11423, 
11452, 11480, 11494, 11508), class = "Date")

 [1] "2000-01-05" "2000-02-03" "2000-03-02" "2000-03-30" "2000-04-13" "2000-05-11" "2000-06-08"
 [8] "2000-07-06" "2000-09-14" "2000-10-05" "2000-10-19" "2000-11-02" "2000-12-14" "2001-02-01"
[15] "2001-03-01" "2001-04-11" "2001-05-10" "2001-06-07" "2001-06-21" "2001-07-05"

我想得到:

 [1] "2000-01-05" "2000-02-05" "2000-03-05" "2000-03-05" "2000-04-05" "2000-05-05" "2000-06-05"
 [8] "2000-07-05" "2000-09-05" "2000-10-05" "2000-10-05" "2000-11-05" "2000-12-05" "2001-02-05"
[15] "2001-03-05" "2001-04-05" "2001-05-05" "2001-06-05" "2001-06-05" "2001-07-05"

我做的是:


sub("%d", "05", date, perl = TRUE)

但是,它不起作用。我认为错误在pattern 中,我不知道如何把握这一天。

谁能帮帮我?

谢谢!

【问题讨论】:

  • 最简单的lubridate::day(date) <- 5?
  • @RuiBarradas 谢谢!我尝试了 day() 但找不到函数
  • day 是包lubridate 中的一个函数。您需要在系统中安装该软件包。
  • Change day of the month in a Date to first day (01)。所有答案(cut 除外)都可以根据您的情况轻松修改。

标签: r dataframe


【解决方案1】:

基础R:

date <- as.Date(sub("\\d{2}$", "05", date))

lubridate:

lubridate::day(date) <- 5

【讨论】:

    【解决方案2】:

    您可以在lubridate 中使用floor_date() 将日期向下舍入到每个月的第一天再加4。

    lubridate::floor_date(date, "month") + 4
    
    #  [1] "2000-01-05" "2000-02-05" "2000-03-05" "2000-03-05" "2000-04-05"
    #  [6] "2000-05-05" "2000-06-05" "2000-07-05" "2000-09-05" "2000-10-05"
    # [11] "2000-10-05" "2000-11-05" "2000-12-05" "2001-02-05" "2001-03-05"
    # [16] "2001-04-05" "2001-05-05" "2001-06-05" "2001-06-05" "2001-07-05"
    

    【讨论】:

      【解决方案3】:

      如果您将日期转换为POSIXlt 对象,您可以更改它的单个组件。

      date <- as.POSIXlt(date)
      date$mday <- 5
      as.Date(date)
      
      # [1] "2000-01-05" "2000-02-05" "2000-03-05" "2000-03-05" "2000-04-05"
      # [6] "2000-05-05" "2000-06-05" "2000-07-05" "2000-09-05" "2000-10-05"
      #[11] "2000-10-05" "2000-11-05" "2000-12-05" "2001-02-05" "2001-03-05"
      #[16] "2001-04-05" "2001-05-05" "2001-06-05" "2001-06-05" "2001-07-05"
      

      【讨论】:

        猜你喜欢
        • 2020-08-15
        • 2023-04-08
        • 2016-05-17
        • 2020-02-08
        • 1970-01-01
        • 1970-01-01
        • 2018-10-05
        • 2022-01-02
        • 1970-01-01
        相关资源
        最近更新 更多