如何在 R 中创建新的日期(月、年)数据
Posted
技术标签:
【中文标题】如何在 R 中创建新的日期(月、年)数据【英文标题】:how to create a new date (month, year) data in R 【发布时间】:2022-01-09 03:01:51 【问题描述】:我有一个非常简单的问题,希望你能帮助我。 我有一个数据集,其中包含 1958 年到 2020 年的月度温度。这给了我总共 756 个观测值,与月数相匹配。 这是我唯一的一列,我想在第一次观察中添加一个日期格式为月-年的列,从 01-1958 开始,继 02-1958、03-1958 之后...... 12 -2020.
有什么想法吗?
非常感谢!
【问题讨论】:
您当前的日期列是什么样的? 【参考方案1】:两件事:
我认为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
除year
(即所有1
s)之外,所有截断的行都是相同的。 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
或字符串$ym_chr
会简单得多。
【讨论】:
非常感谢!这非常有用。我想我说了一些让你感到困惑的话“第一次观察中的 01-1958,继 02-1958、03-1958 ...... 12-2020。”,但实际上我的意思是第一次观察将是 01-1958 ,而不是 02-1958。非常感谢!!!!!! 哎呀,对,完全是我的错误(你说得很清楚,我的眼睛......只是跳过了一个节拍)。已修复,很高兴它对您有用!以上是关于如何在 R 中创建新的日期(月、年)数据的主要内容,如果未能解决你的问题,请参考以下文章