R语言 如何解决“字符串不是标准的明确格式”错误?

elcex8rz  于 2023-03-27  发布在  其他
关注(0)|答案(1)|浏览(464)

我正在尝试对RMarkdown文件进行一些最后的润色以上传它。在我使用CSV文件而不是.xlsx文件之前,它一直工作得很好。我正在尝试创建一个日期列,然后将其拆分为月、日和年的单独列。然后将工作日的列从给出表示工作日的数字改为给出实际名称。在下面的代码块中,当我尝试使用difftime时,我遇到了同样的问题。
我一直在犯这些错误:
charToDate(x)中的错误:字符串不是标准的明确格式Traceback:

  1. format(as.numeric(as.Date(all_trips$started_at),“%Y-%m-%d”))
    1.截止日期(所有行程$开始时间)
  2. as.Date.character(all_trips$started_at)
  3. charToDate(x)
  4. stop(“字符串不是标准的明确格式”)
    我该怎么办?它不喜欢as.Date()或as.numeric(as.Date())。
all_trips$date <- format(as.numeric(as.Date(all_trips$started_at), "%Y-%m-%d"))   
all_trips$ended_at <- format(as.numeric(as.Date(all_trips$ended_at), "%Y-%m-%d"))  
all_trips$month <- format(as.numeric(as.Date(all_trips$date), "%m"))                   
all_trips$day <- format(as.numeric(as.Date(all_trips$date), "%d"))               
all_trips$year <- format(as.numeric(as.Date(all_trips$date), "%Y"))              
all_trips$day_of_week <- format(as.numeric(as.Date(all_trips$date), "%A"))

这是差分时间线

all_trips$ride_length <- difftime(all_trips$ended_at,all_trips$started_at, units = "mins")
dy2hfwbg

dy2hfwbg1#

我猜:
1.首先,将字符串转换为POSIXt-class。

all_trips$started_at <- as.Date(all_trips$started_at, "%m/%d/%Y")
all_trips$ended_at <- as.Date(all_trips$ended_at, "%m/%d/%Y")

1.其次,* 现在 * 您可以对它执行类似日期的数学运算,例如

difftime(all_trips$ended_at, all_trips$started_at, units = "mins")

difftime * 可以 * 处理不属于DatePOSIXt类的字符串,但前提是它们是 * 明确的 *(R认为,而不是人类认为)。在这种情况下,as.Date查看%Y-%m-%d%Y/%m/%d的格式,没有其他内容,因此as.Date内的自动转换以及difftime或内的自动转换完全错误。
示范:

difftime("2020-02-02", "2020-01-01")
# Time difference of 32 days
difftime("2020/02/02", "2020/01/01")
# Time difference of 32 days
difftime("02/02/2020", "01/01/2020")
# Time difference of 396 days

最后一个是不正确的,因为它认为日期格式是:

as.Date("02/02/2020 00:00")
# [1] "0002-02-20"
as.Date("02/02/2020 00:00", format = "%m/%d/%Y")
# [1] "2020-02-02"
difftime(as.Date("02/02/2020 00:00", format = "%m/%d/%Y"), as.Date("01/01/2020 00:00", format = "%m/%d/%Y"))
# Time difference of 32 days

相关问题