3

複数の文字列入力からタイムスタンプを作成する関数があります。

# 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と、datetime のコンポーネント ベクトルのリストが表示されますが、これは私が望むものではありません。

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よいですか、またはより良い方法がありますか?

4

1 に答える 1