如何在 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(即所有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 或字符串$ym_chr 会简单得多。

【讨论】:

非常感谢!这非常有用。我想我说了一些让你感到困惑的话“第一次观察中的 01-1958,继 02-1958、03-1958 ...... 12-2020。”,但实际上我的意思是第一次观察将是 01-1958 ,而不是 02-1958。非常感谢!!!!!! 哎呀,对,完全是我的错误(你说得很清楚,我的眼睛......只是跳过了一个节拍)。已修复,很高兴它对您有用!

以上是关于如何在 R 中创建新的日期(月、年)数据的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 R 语言在基于多个二进制变量的数据框中创建新变量?

如何根据 R 中的日期聚合数据?

如何向日期维度表添加更多日期数据?

如何避免在数据库中创建新列

如何在谷歌云数据存储中创建新模型(种类)

如何根据R中另一列的日期(月/日/年)计算列的年/月平均值、最大值、最小值等