從 1981 年到 2010 年,我每 3 小時創建一個日期/時間資料框(日期),如下所示:
# Create dates and times
start <- as.POSIXct("1981-01-01")
interval <- 60
end <- start as.difftime(10957, units="days")
Dates = data.frame(seq(from=start, by=interval*180, to=end))
colnames(Dates) = "Date"
我現在想將資料分成四個單獨的列,分別為年、月、日和小時。我嘗試使用以下代碼拆分日期:
Date.split = strsplit(Dates, "-| ")
但我收到以下錯誤:
Error in strsplit(Dates, "-| ") : non-character argument
如果我嘗試將日期資料轉換為字符,那么它會完全改變日期,例如
Dates.char = as.character(Dates)
給出以下輸出:
Dates.char Large Character (993.5 kB)
chr "c(347155200, 347166000 ...
我迷失了字符和數字之間的轉換,不知道從這里去哪里。非常感謝任何見解。
uj5u.com熱心網友回復:
一種方法是使用format.
head(
setNames(
cbind(Dates,
format(Dates, "%Y"), format(Dates, "%m"), format(Dates, "%d"),
format(Dates, "%H")),
c("dates", "year", "month", "day", "hour"))
)
dates year month day hour
1 1981-01-01 00:00:00 1981 01 01 00
2 1981-01-01 03:00:00 1981 01 01 03
3 1981-01-01 06:00:00 1981 01 01 06
4 1981-01-01 09:00:00 1981 01 01 09
5 1981-01-01 12:00:00 1981 01 01 12
6 1981-01-01 15:00:00 1981 01 01 15
uj5u.com熱心網友回復:
一種非常簡潔的方法是分解 POSIXlt 記錄:
Dates = cbind(Dates, do.call(rbind, lapply(Dates$Date, as.POSIXlt)))
或者
Dates <- data.frame(Dates, unclass(as.POSIXlt(Dates$Date)))
但是,它會回傳一些附加資料。您可以進一步過濾
# Date sec min hour mday mon year wday yday isdst zone # gmtoff
# 1 1981-01-01 00:00:00 0 0 0 1 0 81 4 0 0 -03 # -10800
# 2 1981-01-01 03:00:00 0 0 3 1 0 81 4 0 0 -03 # -10800
# 3 1981-01-01 06:00:00 0 0 6 1 0 81 4 0 0 -03 # -10800
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/534295.html
標籤:r日期posixct
上一篇:類圖中的繼承和組合問題
