2014-02-14 30 views
0

我正在導入一些天氣數據,但時間戳會分散到不同的列中。我想加入這些列並從它們中創建posix對象。將序列號轉換爲R中的字符表示

datenum <- c() 
for (i in 1:dim(weather)[1]){ 

date_string <- paste0(weather$Year.UTC[i],'-',weather$Month.UTC[i],'-',weather$Day.UTC[i],'-',weather$Hour.UTC[i]) # different columns of data 
# for i = 1, date_string = "2012-12-31-23" 

datenum[i] <- as.POSIXct(date_string, format="%Y-%m-%d-%H",tz="GMT", origin = "1960-01-01") 
# for i = 1, datenum[1] = 1356994800 (numeric) 
} 

as.Date(datenum[1], origin = "1960-01-01") 
# Gives character = "7285-07-27" 

目視確認,我這樣做是正確的,我希望看到的形式;「YYYY-MM-DD HH:MM:SS」,這是我試圖獲得與作爲。日期。轉換爲序列號並返回到字符時,原點相同,但日期完全錯誤。我做錯了什麼?

回答

1

爲什麼這麼複雜?

weather <- data.frame(Year.UTC=c(2012, 2013), 
         Month.UTC=c(1,2), 
         Day.UTC=c(1,2), 
         Hour.UTC=c(22,23)) 
weather <- within(weather, datetime <- 
       as.POSIXct(paste(Year.UTC, Month.UTC, Day.UTC, Hour.UTC, sep="-"), 
         format="%Y-%m-%d-%H", tz="UTC")) 

# Year.UTC Month.UTC Day.UTC Hour.UTC   datetime 
#1  2012   1  1  22 2012-01-01 22:00:00 
#2  2013   2  2  23 2013-02-02 23:00:00 

正如你所看到的,你根本不需要循環。

+0

謝謝羅蘭。這工作正常。我不知道內部功能。我仍然覺得好奇,我的例子給出了一個具有相同原點的錯誤輸出。 – fifthace

+0

原因是'POSIXct'在內部表示爲'秒','日期'表示爲天。 – Roland