0

POSIXct私は機能する基本的な日付を持っています

charDateToPosixct <- function(chrDate, format, timeZone) {
    as.POSIXct(chrDate, format=format, tz=timeZone)
}

文字とタイムゾーンとして日付を含むデータフレームがあります。

chrDate <- c("4/25/2012","4/24/2012","4/16/2012","6/30/2012")
timeZone <- c("US/Eastern","US/Central","US/Pacific","US/Eastern")
df <- data.frame(date=chrDate,timezone=timeZone)
str(df)
'data.frame':   4 obs. of  2 variables:
 $ date    : Factor w/ 4 levels "4/16/2012","4/24/2012",..: 3 2 1 4
 $ timezone: Factor w/ 3 levels "US/Central","US/Eastern",..: 2 1 3 2

date のデータ型を に変更しPOSIXctたいので、この関数charDateToPosixctを format の各行に適用したいと考えています"%m/%d/%y"

4

1 に答える 1

3

applyこのように無名関数を使用する

apply(df, 1, function(x) charDateToPosixct(x[1], "%m/%d/%y", x[2]))
#[1] 1587787200 1587704400 1587020400 1593489600

編集

apply使用した数値ベクトルをに変換できますPOSIXct

as.POSIXct(apply(df, 1, function(x) charDateToPosixct(x[1], "%m/%d/%y", x[2])), origin='1970-01-01')
[1] "2020-04-25 05:00:00 CDT" "2020-04-24 06:00:00 CDT" "2020-04-16 08:00:00 CDT" "2020-06-30 05:00:00 CDT"

または、を使用lapplyしてオブジェクトのリストを取得できPOSIXctます。do.call c次に、、またはと組み合わせることができますReduce(作成時にas.character暗黙的に使用したため、を使用する必要があります)stringsAsFactors=TRUEdata.frame

do.call(c, lapply(seq_len(NROW(df)), function(i) {
  charDateToPosixct(as.character(df$date[i]), "%m/%d/%Y", as.character(df$timezone[i]))
}))

または、2つのベクトルがある場合は、data.frame

do.call(c, lapply(seq_along(chrDate), function(i) {
    charDateToPosixct(chrDate[i], "%m/%d/%Y", timeZone[i])
}))

または、Reduce

Reduce(c, lapply(seq_along(chrDate), function(i) {
    charDateToPosixct(chrDate[i], "%m/%d/%Y", timeZone[i])
}))

私のタイムゾーンはCDTなので、上記のいずれかで

[1] "2012-04-24 23:00:00 CDT" "2012-04-24 00:00:00 CDT" "2012-04-16 02:00:00 CDT" "2012-06-29 23:00:00 CDT"
于 2012-07-18T21:59:38.700 に答える