我有一个包含10个日期的数据框,我将其作为整数读入R中.这是数据框:
19820509
19550503
20080505
19590505
19940517
19690504
20050420
20060503
19840427
19550513
Run Code Online (Sandbox Code Playgroud)
我们称之为df.
我在这里尝试了几行不同的代码,只需将每个值更改为R中的日期格式,如下所示: "1982-05-09"
df <- as.Date(df, "%Y%m%d")
Run Code Online (Sandbox Code Playgroud)
不起作用,也不起作用
df <- as.POSIXlt(df, format = "%Y/%m/%d")
Run Code Online (Sandbox Code Playgroud)
要么
df <- as.POSIXct(df), format = "%Y/%m/%d", origin = "19820509")
Run Code Online (Sandbox Code Playgroud)
我一直收到一条错误,上面写着"不知道如何将'df'转换为类"date"或任何一种POSIX格式.
我觉得这会更简单.有任何想法吗?
谢谢.
Ale*_* A. 10
您必须引用特定列而不是仅引用数据框.如果包含整数日期的变量位于数据框中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
Run Code Online (Sandbox Code Playgroud)
这会将整数转换为字符串,然后将字符串解释为日期.
如果你有多个列包含这种格式的日期,你可以一举转换它们,但你必须略有不同:
df <- data.frame(lapply(df, function(x) as.Date(as.character(x), "%Y%m%d")))
Run Code Online (Sandbox Code Playgroud)
甚至更好,正如评论中提到的docendo discimus:
df[] <- lapply(df, function(x) as.Date(as.character(x), "%Y%m%d"))
Run Code Online (Sandbox Code Playgroud)
这是我的解决方案,它需要lubridate包.您可以ymd将lubridate包的功能用作"替换功能".只需选择要转换的列,然后将其替换为ymd版本.
library(lubridate)
data[ , 1 ] <- ymd(data[, 1])
Run Code Online (Sandbox Code Playgroud)
这个包提供了更多的功能来解析数据或字符串到日期,ymd(y =年,m =月,d =天)都使用这个简单的方案.