【问题标题】:Including Date Format in a Data Frame在数据框中包含日期格式
【发布时间】:2021-05-16 15:29:10
【问题描述】:

如何以月/日/年格式转换数据框?

我正在使用以下代码在我的数据框中创建一个新列,以便它包含元数据中每一行的日期。

meta.df.61.69$date = data.frame(date = str_extract(meta.df.61.69$Title,"\\d{1,2} \\w* \\d{4}"))

当我运行上面的代码时,R 会返回以下内容,如图中的第一行所示:17 JUNE 1961

基本上,我如何将它转换为 月/日/年 格式?像这样:06/17/1961 而不是 17 JUNE 1961。谢谢!

dput(head(meta.df.61.69$date))的返回是structure(list(date = c("17 JUNE 1961", "19 JUNE 1961", "20 JUNE 1961", "21 JUNE 1961", "22 JUNE 1961", "23 JUNE 1961")), row.names = c(NA, 6L), class = "data.frame")

附上我的数据框截图:

【问题讨论】:

    标签: r date


    【解决方案1】:
    # Sample Data
    # Edit: was previously 
    # my_data <- structure(....
    meta.df.61.69 <- structure(list(date.date = c("17 JUNE 1961", "19 JUNE 1961", "20 JUNE 1961",  "21 JUNE 1961", "22 JUNE 1961", "23 JUNE 1961")), row.names = c(NA,  6L), class = "data.frame")
    
    
    # Calculation assuming meta.df.61.69 is a data frame you have
    meta.df.61.69$date_ISO8601 = lubridate::dmy(meta.df.61.69$date.date)
    meta.df.61.69$date_formatted = format(meta.df.61.69$date_ISO8601 , "%m/%d/%Y")
    
    > meta.df.61.69
              date date_ISO8601 date_formatted
    1 17 JUNE 1961   1961-06-17     06/17/1961
    2 19 JUNE 1961   1961-06-19     06/19/1961
    3 20 JUNE 1961   1961-06-20     06/20/1961
    4 21 JUNE 1961   1961-06-21     06/21/1961
    5 22 JUNE 1961   1961-06-22     06/22/1961
    6 23 JUNE 1961   1961-06-23     06/23/1961
    

    【讨论】:

    • 谢谢@JonSpring,但是如果不手动选择日期,我该怎么做呢?例如,不必写 c("17 JUNE 1961") 等。我的数据涵盖了从 1961 年到 1978 年的这段时间,所以我不能手动进行:(
    • 为简单起见,我最初将演示输入表命名为 my_data,但它是为了演示您想用 meta.df.61.69 做什么。我在示例中重命名了表格,以明确表明这也适用于您的表格,前提是其余数据具有一致的形式。
    • 我仍然有错误@JonSpring。我会先一步一步告诉你,我运行代码meta.df.61.69$date = data.frame(date = str_extract(meta.df.61.69$Title,"\\d{1,2} \\w* \\d{4}")),它给了我想要更改的日期格式。接下来,我运行您提供给我的代码:meta.df.61.69$date_ISO8601 = lubridate::dmy(meta.df.61.69$date) 但是,我收到以下消息:“无法解析所有格式。未找到格式。”我该怎么办? Obs:meta.df.61.69 是我拥有的数据框
    • 已编辑以调用提取数据的示例列date.date 就像您的原始帖子一样,这有帮助吗?
    • 它显示以下消息:Error in `$&lt;-.data.frame`(`*tmp*`, date_ISO8601, value = numeric(0)) : replacement has 0 rows, data has 2484
    【解决方案2】:

    试试这个:

    library(lubridate)
    library(stringr)
    
    as.Date(str_to_title("17 JUNE 1961"),"%d %B %Y")
    

    或者在你的情况下:

    library(lubridate)
    library(stringr)
    
    meta.df.61.69$date <- as.Date(str_to_title(meta.df.61.69$date),"%d %B %Y")
    

    【讨论】:

    • 嗨@Marcos,感谢您的回答。但是,当我运行代码 meta.df.61.69$date &lt;- as.Date(str_to_title(meta.df.61.69$date),"%d %B %Y") 时,R 仅在日期列中返回 NA 值和以下消息:“在 stri_trans_totitle(string, opts_brkiter = stri_opts_brkiter(locale = locale)) 中:参数不是原子向量;胁迫”。你应该推荐什么?
    • 如果您可以正确运行建议的代码,但使用数据时出现错误,那么以可重现的方式(而不是屏幕截图)分享您的数据示例将有所帮助。例如,您可以在问题中包含dput(head(meta.df.61.69$date.date)) 的输出,这将创建一个数据对象,准确地重新创建列的前六行。
    • 嗨@JonSpring,输出是structure(list(date = c("17 JUNE 1961", "19 JUNE 1961", "20 JUNE 1961", "21 JUNE 1961", "22 JUNE 1961", "23 JUNE 1961")), row.names = c(NA, 6L), class = "data.frame")
    • 我不太明白发生了什么。我很适合我:x &lt;- structure(list(date = c("17 JUNE 1961", "19 JUNE 1961", "20 JUNE 1961", "21 JUNE 1961", "22 JUNE 1961", "23 JUNE 1961")), row.names = c(NA, 6L), class = "data.frame") library(lubridate) library(stringr) Sys.setlocale("LC_ALL","English") x$date &lt;- as.Date(str_to_title(x$date),"%d %B %Y")
    【解决方案3】:

    Date 类 [as.Date()] 具有指定日期格式的选项。虽然我通常更喜欢您所拥有的明确格式,但您所需的格式将通过以下方式指定:

    format="%m/%d/%Y"
    

    谷歌上有很多示例和教程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-19
      • 1970-01-01
      相关资源
      最近更新 更多