r - 根据两个条件创建新列的最佳方法是什么?
问题描述
我有 60 年的每日天气数据,并且想标记每个冬天(即 1-60)。因为冬天是跨年的,所以没有办法ifelse
仅使用月份来划分或编写简单的语句。ifelse
为 60 年中的每一年指定月份和年份的嵌套语句似乎不切实际,有没有更好的方法来做到这一点?
这里只是一个三年的例子。
month<-c(11,12,1,2,3,4,11,12,1,2,3,4,11,12,1,2,3,4)
year<-c(1950,1950,1951,1951,1951,1951,1951,1951,1952,1952,1952,1952,1952,1952,1953,1953,1953,1953)
df<-cbind(month,year)
df<-as.data.frame(df)
我希望 1950 年 11 月到 1951 年 4 月之间的日期在新列中都标记为 1。1951 年 11 月至 1952 年 4 月之间的日期标记为 2,以此类推。
我希望最终的数据框看起来像这样:
month year winter
1 11 1950 1
2 12 1950 1
3 1 1951 1
4 2 1951 1
5 3 1951 1
6 4 1951 1
7 11 1951 2
8 12 1951 2
9 1 1952 2
10 2 1952 2
11 3 1952 2
12 4 1952 2
13 11 1952 3
14 12 1952 3
15 1 1953 3
16 2 1953 3
17 3 1953 3
18 4 1953 3
由于我拥有 30 多个气象站的 60 年每日数据,因此有什么简单的方法可以做到这一点吗?
解决方案
像这样使用cumsum
:
transform(df, winter = cumsum(month == 11))
给予:
month year winter
1 11 1950 1
2 12 1950 1
3 1 1951 1
4 2 1951 1
5 3 1951 1
6 4 1951 1
7 11 1951 2
8 12 1951 2
9 1 1952 2
10 2 1952 2
11 3 1952 2
12 4 1952 2
13 11 1952 3
14 12 1952 3
15 1 1953 3
16 2 1953 3
17 3 1953 3
18 4 1953 3
推荐阅读
- ubuntu - VS Code:错误:EEXIST:文件已存在,mkdir
- google-app-engine - 使用 Identity Aware Proxy,是否可以向同一 GCP 项目中具有不同主机名的另一个 GAE“服务”发出跨源请求?
- postgresql - 连接同一个表的两列的内容产生一个带双引号的名称
- javascript - onClick 获取元素的值并将值作为 React 中的 url 传递给下一个视图/组件
- javascript - 如何检测浏览器通知
- linux - X11 - 我如何确定 WM 是否会捕获 Key Combo?
- javascript - 添加/删除滑块后的 FlexSlider 同步
- python-mss - 如何在屏幕截图中捕获鼠标指针
- azure-devops - 从 sql 中删除管理身份用户
- amazon-web-services - aws 应用程序负载均衡器找到自动生成的侦听器