我有一個非常簡單的問題,希望你能幫助我。我有一個從 1958 年到 2020 年每月溫度的資料集。這給了我總共 756 個觀測值,與月數相匹配。這是我唯一的一列,我想在第一次觀察中從 01-1958 開始,在 02-1958、03-1958…… 12 之后添加一個日期格式為月-年的列-2020。
有任何想法嗎?
非常感謝!
uj5u.com熱心網友回復:
兩件事情:
我認為一個
Date物件會好得多(沒有Month物件),因為它具有類似自然數的屬性,可以讓您找到差異,沒有偏見的繪圖等。請注意,以這種方式存盤,可以簡單地匯出所有其他表示報告/渲染。即使您必須使用字串,我建議將年份放在第一位,以便按預期進行排序。
你沒有提供資料,所以我會補一些:
mydata <- data.frame(val = 1:756)
mydata$date <- seq(as.Date("1958-01-01"), length.out=756, by="month")
mydata$ym_chr <- format(mydata$date, format = "%Y-%m")
mydata$my_chr <- format(mydata$date, format = "%m-%Y")
mydata[c(1:5, 752:756),]
# val date ym_chr my_chr
# 1 1 1958-01-01 1958-01 01-1958
# 2 2 1958-02-01 1958-02 02-1958
# 3 3 1958-03-01 1958-03 03-1958
# 4 4 1958-04-01 1958-04 04-1958
# 5 5 1958-05-01 1958-05 05-1958
# 752 752 2020-08-01 2020-08 08-2020
# 753 753 2020-09-01 2020-09 09-2020
# 754 754 2020-10-01 2020-10 10-2020
# 755 755 2020-11-01 2020-11 11-2020
# 756 756 2020-12-01 2020-12 12-2020
為了快速證明我們正在查看(不多也不少)每年、所有月份、所有年份的一個月,這里有一個快速表格:
table(year=gsub(".*-", "", mydata$my_chr), month=gsub("-.*", "", mydata$my_chr))
# month
# year 01 02 03 04 05 06 07 08 09 10 11 12
# 1958 1 1 1 1 1 1 1 1 1 1 1 1
# 1959 1 1 1 1 1 1 1 1 1 1 1 1
# 1960 1 1 1 1 1 1 1 1 1 1 1 1
# ...
# 2018 1 1 1 1 1 1 1 1 1 1 1 1
# 2019 1 1 1 1 1 1 1 1 1 1 1 1
# 2020 1 1 1 1 1 1 1 1 1 1 1 1
除了s 之外year,所有截取的行都是相同的,即所有1s。在sum(.)這個756是(只檢查,因為我想確保我做是正確的。)
最后,為了強調我對排序的評論,這里有一些以val從1.
head(mydata[order(mydata$ym_chr),])
# val date ym_chr my_chr
# 1 1 1958-01-01 1958-01 01-1958
# 2 2 1958-02-01 1958-02 02-1958
# 3 3 1958-03-01 1958-03 03-1958
# 4 4 1958-04-01 1958-04 04-1958
# 5 5 1958-05-01 1958-05 05-1958
# 6 6 1958-06-01 1958-06 06-1958
head(mydata[order(mydata$my_chr),])
# val date ym_chr my_chr
# 1 1 1958-01-01 1958-01 01-1958
# 13 13 1959-01-01 1959-01 01-1959
# 25 25 1960-01-01 1960-01 01-1960
# 37 37 1961-01-01 1961-01 01-1961
# 49 49 1962-01-01 1962-01 01-1962
# 61 61 1963-01-01 1963-01 01-1963
如果能夠按日期排序很重要,那么我建議使用$date或 string會簡單得多$ym_chr。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/372290.html
