【问题标题】:Converting to proper date format [duplicate]转换为正确的日期格式[重复]
【发布时间】:2021-10-13 20:43:24
【问题描述】:

我有一组使用dput 函数的数据:

df <- structure(list(ID = c(19512957L, 5603090L, 18235508L), 
    ID.Type = c("A", "B", "B"), Voter.First.Name = c("Joe", 
    "Heather", "Hannah"), Voter.Last.Name = c("Smith", "Jones", 
    "James"), Phone = c(1234567890, 2345678901, 3456789012
    ), Date.Called = c("9/28/21", "9/28/21", "9/28/21")), row.names = c(NA, 
3L), class = "data.frame")

我正在尝试将Date.Called 转换为日期格式,但是当我运行时:

df$Date.Called <- as.Date(df$Date.Called)

我收到以下错误:

Error in charToDate(x) : 
  character string is not in a standard unambiguous format

我在 Stack Overflow 上研究了这个问题,认为我找到了答案,那就是:

df$Date.Called <- as.Date(as.character(df$Date.Called),"%Y%m%d")

但这只是将Date.Called 下的所有结果返回为 NA。

我错过了什么?

编辑我还有另一个数据框

df2 <- structure(list(ID = c(19512957L, 5603090L, 18235508L), 
        ID.Type = c("A", "B", "B"), Voter.First.Name = c("Joe", 
        "Heather", "Hannah"), Voter.Last.Name = c("Smith", "Jones", 
        "James"), Phone = c(1234567890, 2345678901, 3456789012
        ), Date.Called = c("09-28-21", "09-28-21", "09-28-21")), row.names = c(NA, 
    3L), class = "data.frame")

我正在尝试将Date.Called 列转换为与@maarvd 答案类似的格式,但是当我运行时:

df2$Date.Called <- as.Date(df2$Date.Called, "%m/%d/%y")

它再次只返回 NAs

【问题讨论】:

  • 格式是月/日/年,而不是年/月/日。试试as.Date(df$Date.Called, "%m/%d/%y")
  • @maarvd 谢谢你。还有一个问题。如果我正在尝试做类似的事情(从字符转换为日期格式)但Date.Called 的数据已经看起来像06-20-2021。因为当我运行您为其他数据集编写的代码时,它会将其转换为 NA。
  • "09-28-21" 是 "%m-%d-%y" 格式,因为它在数字段之间有破折号,而不是斜线。
  • @JonSpring 正确,那么根据@maarvd 的回答将其转换为与df 相同的日期格式的正确方法是什么?
  • as.Date(df$Date.Called, "%m-%d-%y")

标签: r dplyr


【解决方案1】:

这应该可行。

  df$Date.Called <- as.Date(df$Date.Called,"%d/%m/%y")

检查:

class(df$Date.Called)
[1] "Date"

【讨论】:

    【解决方案2】:

    更新: 对于df2

    library(dplyr)
    library(lubridate)
    df2 %>% 
      mutate(Date.Called = as_date(mdy(Date.Called)))
    
         ID ID.Type Voter.First.Name Voter.Last.Name      Phone Date.Called
    1 19512957       A              Joe           Smith 1234567890  2021-09-28
    2  5603090       B          Heather           Jones 2345678901  2021-09-28
    3 18235508       B           Hannah           James 3456789012  2021-09-28
    

    我们可以使用 as_datemdy 函数中的 lubridate 包:

    library(dplyr)
    library(lubridate)
    df %>% 
      mutate(Date.Called = as_date(mdy(Date.Called)))
    
    
            ID ID.Type Voter.First.Name Voter.Last.Name      Phone Date.Called
    1 19512957       A              Joe           Smith 1234567890  2021-09-28
    2  5603090       B          Heather           Jones 2345678901  2021-09-28
    3 18235508       B           Hannah           James 3456789012  2021-09-28
    

    【讨论】:

    • 谢谢你,但我实际上对我原来的问题进行了编辑。基本上,我希望两个 DF 的 Date.Called 格式相同
    • @LimitedHangout:请看我的更新!
    猜你喜欢
    • 1970-01-01
    • 2016-03-08
    • 1970-01-01
    • 2018-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多