我有一个从多个字符串输入创建时间戳的函数:
# Create timestamp from date, time, and timezone strings
str_to_dt <- function(date_str, time_str, tz_str){
as.POSIXlt(x = paste(date_str, time_str), format = "%m/%d/%Y %H:%M",
tz = tz_str)
}
我有输入值数组:
dates <- c("01/23/1945", "11/11/1911")
times <- c("12:12", "13:13")
tzones <- c("Pacific/Guam", "America/New_York")
由于as.POSIXlt
只需要一个常量tz
,而不是一个向量,我必须遍历这些。以下 for 循环产生我想要的输出,但我更愿意了解如何在plyr
.
ts <- as.POSIXlt(rep(NA,length(dates)))
for(i in 1:length(dates)){
ts[i] <- str_to_dt(date_str = dates[i],
time_str = times[i],
tz_str = tzones[i])
}
ts
[1] "1945-01-23 11:11:00 GST" "1911-11-11 13:13:00 EST"
当我使用时,mapply
我得到一个日期时间分量向量的列表,这不是我想要的。
mapply(FUN=str_to_dt, date_str=dates, time_str=times, tz_str=tzones) # decomposed
当我使用时,mlply
我可以获得正确的 2 个 POSIXlt 结果的列表:
library(plyr)
mlply(.data=data.frame(date_str = dates, time_str = times,
tz_str = tzones, stringsAsFactors=FALSE),
.fun=str_to_dt)
但是我不知道将它们放回数组中,因为它unlist
完全分解了 POSIXlt。类似的功能maply
给了我一个错误:
maply(.data=data.frame(date_str = dates, time_str = times, tz_str = tzones,
stringsAsFactors=FALSE),
.fun=str_to_dt) # Error: Results must have one or more dimensions.
如何修复错误以使其maply
正常工作,还是有更好的方法?