每一行都有不同的 origintimezone。我需要利用 origintimezone 时间中的 standardformat_new 列来创建一个新列,其中时间遵循 com_timezonenames。
简化版本将是这样的
a = ymd_hms('2017-10-10 10:20:00',tz = 'Australia/Sydney')
a
with_tz(a, tz = 'Singapore')
[![在此处输入图像描述][2]][2]
但是,当我应用与上述类似的代码时,我遇到了以下错误。
[![在此处输入图像描述][3]][3]
我曾尝试制作一个 for 循环来运行整个列表,但超过几十万的数据集使其不可行。
REPREX as reqeusted 这是我最初拥有的。
[![在此处输入图像描述][4]][4]
structure(list(com_country = c("SG", "AU", "NZ", "UK", "AU",
"AU"), orderdate_local = c("9/20/2017 4:47:35 AM", "9/30/2017 7:00:00 AM",
"9/20/2017 1:37:14 AM", "9/18/2017 9:38:34 PM", "9/30/2017 3:07:29 AM",
"9/30/2017 10:17:01 AM"), origincountry = c("US", "AU", "UK",
"AU", "AU", "AU")), .Names = c("com_country", "orderdate_local",
"origincountry"), row.names = c(NA, -6L), class = c("tbl_df",
"tbl", "data.frame"))
orderdate_local 在 origincountry 时区中给出,因此我需要将国家代码映射到 tz 值。
##getting origin timezone from countrycode
dd$origintimezone <- mapvalues(dd$origincountry,
from=c("AU", "UK", "US"),
to=c("Australia/Sydney","Europe/London","America/Toronto"))
此后我需要将 orderdate_local 转换为标准 POSIXlt 格式,以便我可以使用 strptime 函数
dd$standardformat_new <- strptime(dd$orderdate_local,format="%m/%d/%Y
%I:%M:%S %p")
dd$com_timezonenames <- mapvalues(dd$com_country,
from=c("AU","MY","NZ","SG","PH","HK","UK","TH"),
to=c("Australia/Sydney", "Asia/Kuala_Lumpur", "Pacific/Auckland","Asia/Singapore","Asia/Manila","Asia/Hong_Kong","Europe/London","Asia/Bangkok"))