我有一個包含兩個字符變量的數據框:一個是時間戳,另一個是美國狀態。 我試圖將每個時間戳轉換爲一個POSIX對象失敗,其中時區根據相應的狀態值分配:佛羅里達州(FL)的東部時間(EST)和德克薩斯州(TX)的中央時間(CST6CDT)。
但是,無論我嘗試什麼,R將只返回單個時區中的所有時間戳,或者返回包含自原點後的秒數的字符串。 我當然可以將字符串轉換爲POSIX對象,但我來了整整一圈,無法聲明多個時區。 我也嘗試過用循環代替索引,但這也不起作用。R如何將時間戳轉換爲同一列中的多個時區
我會特別想知道發生了什麼事。我的猜測(或許是不正確的)是問題與列中聲明的數據類型有關,因爲這可以解釋例3中發生的事情。 但是,無論我讀過什麼或嘗試過什麼,我都找不到讓這個工作。
實施例1 - 轉換DF $時間爲POSIX對象,然後試圖通過DF $狀態
df <- data.frame(time = c("2010-03-05 07:03:00", "2010-03-05 16:00:00", "2010-03-06 07:01:00"), state = c("FL", "FL", "TX"))
df$time <- as.character(df$time); df$state <- as.character(df$state)
df$time <- as.POSIXct (strptime(df$time, "%Y-%m-%d %H:%M:%S"))
df$time
#-----
#[1] "2010-03-05 07:03:00 PST" "2010-03-05 16:00:00 PST" "2010-03-06 07:01:00 PST"
df$time
分配不同的時區已經被成功地轉換爲POSIX對象。但是,當我嘗試按狀態分配時區時,時區將保持它初始化的任何狀態(在我的位置,即PST)。
df$time[df$state == "FL"] <- as.POSIXct (strptime(df$time[df$state == "FL"], "%Y-%m-%d %H:%M:%S"), tz = "EST"
df$time[df$state == "TX"] <- as.POSIXct (strptime(df$time[df$state == "TX"], "%Y-%m-%d %H:%M:%S"), tz = "CST6CDT")
df$time
#[1] "2010-03-05 04:03:00 PST" "2010-03-05 13:00:00 PST" "2010-03-06 05:01:00 PST"
例2 - 嘗試使用df $時間字符串直接轉換到每個國家的時區沒有第一converti
ng the string to a POSIX object
df <- data.frame(time = c("2010-03-05 07:03:00", "2010-03-05 16:00:00", "2010-03-06 07:01:00"), state = c("FL", "FL", "TX"))
df$time <- as.character(df$time); df$state <- as.character(df$state)
df$time
#[1] "2010-03-05 07:03:00" "2010-03-05 16:00:00" "2010-03-06 07:01:00"
df$time[df$state == "FL"] <- as.POSIXct (strptime(df$time[df$state == "FL"], "%Y-%m-%d %H:%M:%S"), tz = "EST")
df$time[df$state == "TX"] <- as.POSIXct (strptime(df$time[df$state == "TX"], "%Y-%m-%d %H:%M:%S"), tz = "CST6CDT")
df$time
[1] "1267790580" "1267822800" "1267880460"
例3 - 雖然我可以採取DF $時間字符串由示例2中的代碼生成併成功將它們轉換爲EST ...
as.POSIXct(as.numeric(df$time[df$state == "FL"]), origin = "1970-01-01", tz = "EST")
#[1] "2010-03-05 07:03:00 EST" "2010-03-05 16:00:00 EST"
#...但是如果我嘗試將這些對象傳遞迴數據框,則R會將它們轉換回字符串,然後我會完整循環。
df$time[df$state == "FL"] <- as.POSIXct(as.numeric(df$time[df$state == "FL"]), origin = "1970-01-01", tz = "EST")
df$time
#[1] "1267790580" "1267822800" "1267880460"
那麼這是一個真正的PITA來編輯。學習如何正確使用SO降價格式功能,並且不要過於粗暴地演示。取消「提前致謝」和禮貌請求,因爲這些對於SO來說是明確的棄用。這是「只是事實,女士」專區。 R不支持混合時區向量。需要拿出一個備用。財務人員已經做了很長時間了,所以我建議搜索。內部時間都是GMT。 –
我不確定R支持具有不同時區的POSIXct對象向量。也許你可以在時間列旁邊製作一個「tz」列來定義你想要的時區。 – giraffehere