【发布时间】:2018-04-12 09:55:42
【问题描述】:
我有一个包含两列的data.frame:
-
UTCTime是 UTC 区域中的事件时间 -
TimeZone这是事件发生的实际时区
我的数据样本:
UTCTime <- as.POSIXct(c("2018-04-12 17:23:14", "2018-04-12 17:17:14","2018-04-12 07:48:20", "2018-04-12 11:25:04", "2018-04-12 11:24:38"), tz = "UTC")
TimeZone <- c("Europe/Prague", "Europe/Dublin", "Europe/Prague", "Europe/Prague", "Europe/Prague")
df <- cbind.data.frame(UTCTime, TimeZone, stringsAsFactors = FALSE)
df
UTCTime TimeZone
1 2018-04-12 17:23:14 Europe/Prague
2 2018-04-12 17:17:14 Europe/Dublin
3 2018-04-12 07:48:20 Europe/Prague
4 2018-04-12 11:25:04 Europe/Prague
5 2018-04-12 11:24:38 Europe/Prague
我想获取本地时区的时间向量。我成功地为单行做到了:
> format(df$UTCTime[1], "%Y-%m-%d %H:%M:%S", tz = df$TimeZone[1])
[1] "2018-04-12 19:23:14"
但是,当我尝试将其应用于整个 data.frame 时,我收到了一个错误:
> apply(df, 1, function(x) format(x["UTCTime"], "%Y-%m-%d %H:%M:%S", tz = x["TimeZone"]))
Error in format.default(x["UTCTime"], "%Y-%m-%d %H:%M:%S", tz = x["TimeZone"]) :
invalid 'trim' argument
当我尝试将任何其他函数传递给 apply 时,一切正常:
> apply(df, 1, function(x) paste(x["UTCTime"], x["TimeZone"]))
[1] "2018-04-12 17:23:14 Europe/Prague" "2018-04-12 17:17:14 Europe/Dublin" "2018-04-12 07:48:20 Europe/Prague"
[4] "2018-04-12 11:25:04 Europe/Prague" "2018-04-12 11:24:38 Europe/Prague"
- 为什么我在这里收到
invalid 'trim' argument? - 如何获得当地时间的向量?
【问题讨论】:
-
您不能在此处使用
apply,因为它会将 data.frame 强制转换为矩阵,并且矩阵只能保存 (i) 一种数据类型,并且 (ii) 不能保存 POSIXct 变量。