请考虑以下事项

$ R --vanilla

> as.Date("01 Jan 2000")
Error in charToDate(x) :
    character string is not in a standard unambiguous format

但这个日期显然是is年前的标准明确格式.为什么会显示错误消息?

更糟糕的是,一个模棱两可的日期显然是在没有警告或错误的情况下被接受的,然后读取错误!

> as.Date("01/01/2000")
[1] "0001-01-20"

我在[R]标签中搜索并找到了包含此错误消息的28个其他问题.所有这些都有解决方案和变通方法,包括指定格式iiuc.这个问题的不同之处在于,我问的是,标准的无歧义格式在哪里定义,它们可以被更改吗?是每个人都收到这些信息还是只有我?也许这与地区有关?

换句话说,有没有比需要指定格式更好的解决方案?

29 questions containing "[R] standard unambiguous format"

> sessionInfo()
R version 2.15.2 (2012-10-26)
Platform: x86_64-w64-mingw32/x64 (64-bit)

locale:
[1] LC_COLLATE=English_United Kingdom.1252
[2] LC_CTYPE=English_United Kingdom.1252
[3] LC_MONETARY=English_United Kingdom.1252
[4] LC_NUMERIC=C
[5] LC_TIME=English_United Kingdom.1252

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base

推荐答案

这是记录在案的行为.从?as.Date开始:

格式:一个字符串.如果未指定,它将try

as.Date("01 Jan 2000")产生错误,因为格式不是上面列出的两种格式之一.as.Date("01/01/2000")给出的答案不正确,因为日期不是上面列出的两种格式之一.

我把"标准明确"理解为"ISO-8601"(尽管as.Date没有那么严格,因为"%m/%d/%Y"不是ISO-8601).

如果收到此错误,解决方案是使用?strptimeDetails节中描述的格式指定日期(或日期时间)的格式.

确保转换规范的order以及任何separatorsinput字符串的格式完全一致.此外,如果您的数据包含日/月名称和/或缩写,请务必特别小心,因为转换将取决于您的语言环境(参见?strptime?LC_TIME中的示例;另请参见strptime, as.POSIXct and as.Date return unexpected NA).

R相关问答推荐

根据 R 上的其他条目填充缺失值

如何将数字序列添加到每组data.frame?

如何在 r 中为转换后的变量创建汇总统计表

在R中以长格式(相对于基组)按组计算跨行的增长率

改进 if else 语句

高级:为什么 ?function(){} 在 R 中有效

Ubuntu 22.04 中 R impish repo 的问题 - impish-cran40

根据 R 中的出生年份分组人

如何使用 cross 和 .names 参数将此基本 R 代码转换为 dplyr

在 R 中推断顺序数据中的选择顺序

如何将变量值映射到图案填充 - ggplot / ggpattern (

计算R中几个分类变量的频率

R:如何在ggplot中将对角线添加到分箱箱线图中

R:如何在一个图上绘制多个图(shiny )

使用 for 循环遍历方程中的两个不同的值序列

R:根据特定条件删除重复行

一次对多个因子的水平进行排序

R数据框中不同组的卡方检验

如果匹配,则用另一个数据框替换列名

根据 R 中第一个数据集的值向量化来自不同数据集的变量的新变量添加