This question already has answers here:
Converting year and month (“yyyy-mm” format) to a date?

(7个答案)


3年前关闭。





我有一个数据框,其中日期以double形式存储,例如1993.09 1993.10 1993.11 1993.12

我想将其转换为日期格式'%Y %m %d'(天总是1)。

据我了解,as.Date()需要一个字符串输入。但是,由于某种原因,当我将日期转换为字符串sapply(dates, as.character)时,零后的零会消失,实际上将十月转换为一月,导致每年两次。

dates
1993.07 1993.08 1993.09 1993.10 1993.11 1993.12
sapply(dates, as.character)
sub("[.]", " ", dates)
"1993 07" "1993 08" "1993 09" "1993 1"  "1993 11" "1993 12"


是否有更直接的日期转换方式?还是我在哪里弄糟?

dput:

c(1993.01, 1993.02, 1993.03, 1993.04, 1993.05, 1993.06, 1993.07,
1993.08, 1993.09, 1993.1, 1993.11, 1993.12)

最佳答案

您的问题是您所输入的内容是字符串,但看起来像是数字,并且在导入过程中没有进行任何处理。 R不能区分1993.11993.10。两者是相同的数字。因此,as.character(1993.10)返回"1993.1"。您需要使用格式化功能来确保在句点后得到两位数,因为as.Date "1993.1""1993.01"是同一个月。

x <- c(1993.09, 1993.10, 1993.11, 1993.12)
as.Date(sprintf("%.2f.01", x), format = "%Y.%m.%d")
#[1] "1993-09-01" "1993-10-01" "1993-11-01" "1993-12-01"


当然,x应该作为一个字符导入。

08-19 16:01