This question already has answers here:
Converting year and month (“yyyy-mm” format) to a date?
(7个答案)
3年前关闭。
我有一个数据框,其中日期以
我想将其转换为日期格式
据我了解,
是否有更直接的日期转换方式?还是我在哪里弄糟?
dput:
当然,
(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.1
和1993.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