R中将整数数据框转换为日期。

16

我有一个包含10个日期的数据框,我将其作为整数读入R中。以下是该数据框:

19820509
19550503
20080505
19590505
19940517
19690504
20050420
20060503
19840427
19550513
我们将其称为df.
我在这里尝试了几行不同的代码,以简单地将每个值更改为R中的日期格式,例如:"1982-05-09"
df <-  as.Date(df, "%Y%m%d")

不起作用,也是一样的

 df <- as.POSIXlt(df, format = "%Y/%m/%d")
或者
df <- as.POSIXct(df), format = "%Y/%m/%d", origin = "19820509")

我不断收到一个错误,说“不知道如何将'df'转换为'class "date"'或任何POSIX格式之一。

我以为这会更简单。你有什么想法吗?

谢谢。


6
你需要将其用于数据框的列上,而不是整个数据框本身。 - Max Candocia
这里是一个POSIX解决方案,其中df是你的数据框:as.POSIXct(as.character(df[,1]), format="%Y%m%d") - Ruthger Righart
3个回答

18

你需要引用特定的列而不是只引用数据框。如果包含整数日期的变量在一个名为df的数据框中,并且被称为x,你可以这样做:

你必须引用特定的列而不是只引用数据框。如果包含整数日期的变量在一个名为df的数据框中,并且被称为x,你可以这样做:

df <- transform(df, x = as.Date(as.character(x), "%Y%m%d"))

#             x
#  1 1982-05-09
#  2 1955-05-03
#  3 2008-05-05
#  4 1959-05-05
#  5 1994-05-17
#  6 1969-05-04
#  7 2005-04-20
#  8 2006-05-03
#  9 1984-04-27
# 10 1955-05-13

这将整数转换为字符字符串,然后将字符串解释为日期。

如果你有多个包含此格式日期的列,你可以一举将它们转换,但需要稍微不同的方法:

df <- data.frame(lapply(df, function(x) as.Date(as.character(x), "%Y%m%d")))

甚至更好的是,正如“docendo discimus”在评论中提到的:

df[] <- lapply(df, function(x) as.Date(as.character(x), "%Y%m%d"))

可以的!我一开始就尝试了,但还是有点麻烦。字符转换可以了。谢谢。 - user3720887
1
对于lapply代码,您可以稍微修改它为:df[] <- lapply(df, function(x) as.Date(as.character(x), "%Y%m%d")) 这样您就不需要使用data.frame调用。 - talat
@docendodiscimus:太好了!谢谢你指出来。我已经把它加到答案里了。 - Alex A.
不错!@docendodiscimus 做得好。 - user3720887

7

这是我的解决方案,需要使用 lubridate 包。你可以使用 lubridate 包的 ymd 函数作为“替换函数”。只需选择要转换的列并将其替换为其 ymd 版本即可。

 library(lubridate)
 data[ , 1 ] <- ymd(data[, 1])

这个包提供了更多的函数用于将数据或字符串解析为日期,使用简单的 ymd(y=年,m=月,d=日)规则。


谢谢!是的,我一直在更深入地研究这个包,以便在R中处理不同的日期相关任务。 - user3720887

0
v = c(data$DATE)
date <- as.Date(paste(v), format("%Y%m%d"))
date

data$DATE 是一个包含日期的列,以整数格式表示,例如 2000013120000201


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接