r - 将月份更改为季节
问题描述
我在 R 工作。我有一个数据框,其中有采样日期、全名采样日期的月份和水温。以下是我的数据框示例。
Date Month Temperature
2016-07-01 July 13
2017-01-08 January 5
2018-09-19 September 11
2019-10-24 October 9
我想要做的是使用月份并创建一个标记季节的新列。为了这个项目的目的,我将一月至三月分类为冬季,四月至六月为春季,七月至九月为夏季,十月至十二月为秋季。
解决方案
Date
假设在字段属于类的末尾的注释中可重现地显示输入Date
- 如果不是,则将其转换为注释中所示。下面展示了各种方法。前两个转换Date
列(看起来更容易),后两个转换Month
列。
1) yearqtr 转换Date
为yearqtr
对象。使用cycle
on 将给出季度(1、2、3 或 4),然后我们可以将季度编号索引到seasons
.
library(zoo)
seasons <- c("Winter", "Spring", "Summer", "Fall")
transform(DF, Season = seasons[cycle(as.yearqtr(Date))])
## Date Month Temperature Season
## 1 2016-07-01 July 13 Summer
## 2 2017-01-08 January 5 Winter
## 3 2018-09-19 September 11 Summer
## 4 2019-10-24 October 9 Fall
如果只使用季度数字就可以了,那么这个单行就足够了。
transform(DF, Season = cycle(as.yearqtr(Date)))
2) Quarters 我们也可以通过使用返回 , 或quarters
作为给定日期的字符串的函数Q1
仅Q2
使用基数 R 来做到这一点。在这种情况下,我们需要确保使用这些名称以便使用它进行查找。Q3
Q4
Seasons.Q
Seasons.Q <- c(Q1 = "Winter", Q2 = "Spring", Q3 = "Summer", Q4 = "Fall")
transform(DF, Season = Seasons.Q[quarters(Date)])
如果使用 Q1、Q2、Q3、Q4 代替名称是可以的,那么我们可以将其简化为单行:
transform(DF, Season = quarters(Date))
3) match 上面使用了 Date 字段。我们还可以使用 Month 字段作为我们的输入,将其转换为月份数 1、2、3、...、12,然后将其转换为可以索引到seasons
上面定义的季度数。
transform(DF, Season = seasons[(match(Month, month.name) - 1) %/% 3 + 1])
如果季度数字而不是季节名称就足够了,那么我们可以将其简化为单行:
transform(DF, Season = (match(DF$Month, month.name) - 1) %/% 3 + 1)
4)日期格式 我们也可以使用日期格式将月份转换为日期,然后使用quarters
和查找到Seasons.Q
.
transform(DF, Season = Seasons.Q[quarters(as.Date(paste(DF$Month, "001"), "%B %y%d"))])
笔记
Lines <- "
Date Month Temperature
2016-07-01 July 13
2017-01-08 January 5
2018-09-19 September 11
2019-10-24 October 9"
DF <- read.table(text = Lines, header = TRUE)
DF$Date <- as.Date(DF$Date)
推荐阅读
- aurelia - Froala 和 Aurelia 集成
- c# - 需要通过 TCP 发送 [syn, ack] 数据包
- javascript - 如何在 Javascript 中为 if 语句添加容差
- assembly - 如何在最新的 64 位 Intel CPU 上使用寄存器交换栈顶而没有隐式锁定?
- ios - 子类化 UITextField 以包含选择器和工具栏
- android - 如何对自定义对象的 ArrayList 进行排序?
- .net-core - .NET Core 内存中流类,可以使用内存
作为存储 - perl - 在 Perl 中,格式多行不使用 @* 显示
- django - 没有名为“django.core.exception”的模块
- haskell - 当我尝试导出 eq 时出现错误。我怎样才能解决这个问题?