R 无法使用as.Date设置月份格式
我在as.Date的“格式”部分遗漏了一些明显的内容。考虑这个例子R 无法使用as.Date设置月份格式,r,date,R,Date,我在as.Date的“格式”部分遗漏了一些明显的内容。考虑这个例子 d1我不知道,但是%b在领先领域似乎不起作用 以下所有测试均失败(给出NA): 而当您在%b之前加上%d时,它会起作用: > as.Date("1Jan1947", format="%d%b%Y") > as.Date("29-Jan-1947", format="%d-%b-%Y") > as.Date("08/Aug/1947", format="%d/%b/%Y") > as.Date("22 De
d1我不知道,但是%b在领先领域似乎不起作用
以下所有测试均失败(给出NA):
而当您在%b之前加上%d时,它会起作用:
> as.Date("1Jan1947", format="%d%b%Y")
> as.Date("29-Jan-1947", format="%d-%b-%Y")
> as.Date("08/Aug/1947", format="%d/%b/%Y")
> as.Date("22 Dec 1947", format="%d %b %Y")
似乎neilfws有关于不完整性的答案。
这也解释了为什么只给予一年:
> as.Date("1947", format="%Y")
[1] "1947-09-19"
最简单的答案是日期包含一天,如果没有指定一天,那么.date()就会混淆。从?截止日期文档:
如果日期字符串未完全指定日期,则
返回的答案可能是系统特定的。最常见的行为
是假定缺少的年、月或日是当前的年、月或日。
如果指定的日期不正确,则可靠的实现将失败
给出一个错误,日期报告为“NA”。不幸的是
一些常见的实现(如“glibc”)是不可靠的,并且
猜猜意图
仔细想想,像“1947年3月”这样的术语,严格地说,并不是日期——它只是月份和年份的组合。日期是1947年3月(或任何其他月+年)的一个特定日期-因为您没有指定日期,所以您没有日期。这是因为您的数据中的d2
。frame
是一个格式错误的日期。它不包含一天。要想了解这一点,请考虑使用以下内容:
d1$date2 <- as.Date(x=paste("1/",d1$d2, sep=""), format="%d/%b/%Y")
> d1
d d2 date1 date2
1 1/Jan/1947 Jan/1947 1947-01-01 1947-01-01
2 1/Feb/1947 Feb/1947 1947-02-01 1947-02-01
3 1/Mar/1947 Mar/1947 1947-03-01 1947-03-01
d1$date2 d1
d d2日期1日期2
1947年1月1日1947年1月1947-01-01 1947-01-01
1947年2月2日1947年2月1947-02-01 1947-02-01
3 1947年3月1日1947年3月1947-03-01 1947-03-01
根据Cole Beck的文档“R中的处理日期时间”,在内部,日期保存为单个数值,该数值统计自参考日期1970-01-01以来经过的天数。
示例:1970-01-31将在内部保存为30
因此,回到问题上来,如果在给定的输入日期(即不完整的日期)中没有提到某一天(%d),它将无法在内部存储该日期,从而导致“警告消息:强制引入的NAs”
来源:问题不在于%b是前导字段,而是缺少一天。如果不是“为什么”而是“如何”,那么答案应该是“require(zoo);d1$date2 zoo包中的“yearmon”
类可以处理没有天数的年/月。
> as.Date("1947", format="%Y")
[1] "1947-09-19"
d1$date2 <- as.Date(x=paste("1/",d1$d2, sep=""), format="%d/%b/%Y")
> d1
d d2 date1 date2
1 1/Jan/1947 Jan/1947 1947-01-01 1947-01-01
2 1/Feb/1947 Feb/1947 1947-02-01 1947-02-01
3 1/Mar/1947 Mar/1947 1947-03-01 1947-03-01