我有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年的每日数据?
答案 0 :(得分:1)
像这样使用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