R:如何将字符串数据帧转换为 POSIXt 对象?
R: How do I convert a dataframe of strings into POSIXt objects?
我有一个表示时间的字符串数据框,例如:
times <- structure(list(exp1 = c("17:19:04 \r", "17:28:53 \r", "17:38:44 \r"),
exp2 = c("17:22:04 \r", "17:31:53 \r", "17:41:45 \r")),
row.names = c(NA, 3L), class = "data.frame")
如果我 运行 strptime()
在我的数据帧 times
的单个元素上,它会将它转换成一个漂亮的 POSIXt 对象:
strptime(times[1,1], '%H:%M:%S')
[1] "2020-02-19 17:19:04 GMT"
太好了,所以现在我想将我的整个数据帧 times
转换成这种格式。
我似乎无法找到顺利完成此操作的解决方案。
到目前为止我尝试过的一些事情:
strptime(times, '%H:%M:%S') # generates NA
strftime(times, '%H:%M:%S') # Error: do not know how to convert 'x' to class “POSIXlt”
apply(times, 2, function(x) strftime(x, '%H:%M:%S')) # Error: character string is not in a standard unambiguous format
最接近我想要的是:
apply(times, 2, function(x) strptime(x, '%H:%M:%S'))
它生成了一个混乱的列表。我应该可以找到一种使用方法,但必须有更简单的方法吗?
你可以使用 lapply
.
times[] <- lapply(times, strptime, '%H:%M:%S')
# exp1 exp2
# 1 2020-02-19 17:19:04 2020-02-19 17:22:04
# 2 2020-02-19 17:28:53 2020-02-19 17:31:53
# 3 2020-02-19 17:38:44 2020-02-19 17:41:45
注意:apply
也有效。
times[] <- apply(times, 2, function(x) strptime(x, '%H:%M:%S'))
诀窍是用 [] <-
替换列(与用列表覆盖数据框相反),在这种情况下可以将其视为 times[1:2] <- lapply(times[1:2], ·)
的缩写。
我有一个表示时间的字符串数据框,例如:
times <- structure(list(exp1 = c("17:19:04 \r", "17:28:53 \r", "17:38:44 \r"),
exp2 = c("17:22:04 \r", "17:31:53 \r", "17:41:45 \r")),
row.names = c(NA, 3L), class = "data.frame")
如果我 运行 strptime()
在我的数据帧 times
的单个元素上,它会将它转换成一个漂亮的 POSIXt 对象:
strptime(times[1,1], '%H:%M:%S')
[1] "2020-02-19 17:19:04 GMT"
太好了,所以现在我想将我的整个数据帧 times
转换成这种格式。
我似乎无法找到顺利完成此操作的解决方案。
到目前为止我尝试过的一些事情:
strptime(times, '%H:%M:%S') # generates NA
strftime(times, '%H:%M:%S') # Error: do not know how to convert 'x' to class “POSIXlt”
apply(times, 2, function(x) strftime(x, '%H:%M:%S')) # Error: character string is not in a standard unambiguous format
最接近我想要的是:
apply(times, 2, function(x) strptime(x, '%H:%M:%S'))
它生成了一个混乱的列表。我应该可以找到一种使用方法,但必须有更简单的方法吗?
你可以使用 lapply
.
times[] <- lapply(times, strptime, '%H:%M:%S')
# exp1 exp2
# 1 2020-02-19 17:19:04 2020-02-19 17:22:04
# 2 2020-02-19 17:28:53 2020-02-19 17:31:53
# 3 2020-02-19 17:38:44 2020-02-19 17:41:45
注意:apply
也有效。
times[] <- apply(times, 2, function(x) strptime(x, '%H:%M:%S'))
诀窍是用 [] <-
替换列(与用列表覆盖数据框相反),在这种情况下可以将其视为 times[1:2] <- lapply(times[1:2], ·)
的缩写。