我有一个数据框,它是1961年至2018年每月分辨率的气象测量时间序列。我对测量月平均温度的变量感兴趣,因为我需要夏季的多年平均温度。 / p>
为此,我必须从“ DateVaraible”列中过滤出第五和第六位数字,即月份。 时间列中的值的格式如下 “ 19610701”。所以我需要1961年以后的07(Juli)。
我开始为其他目的编码1个月,所以我没有尝试任何值得一提的事情。我猜.grepl可以完成这项工作,但是我不知道“匹配”运算符的工作方式。
所以我从可以正常工作的代码开始。
summersmonth<- Df[DateVariable %like% "19610101" I DateVariable %like% "19610201"]
我期望这样的代码
summermonths <- Df[DateVariable %like% "**06**" I DateVariable%like% "**07**..]
因此,所有具有从06到09的月份数字的条目都将保存在新的数据框summermonths中。
预先感谢您对我的问题的答复或反馈。
更新
感谢您的回答,我得到了第一部分,这是将变量转换为as.date
,格式为“ month”(Class = char)
现在我需要选择从Juni到9月的几个月。
一种获得我想要的结果的可怕方法是事后进行几次subset
和一次rbind
。
Sommer1<-subset(Df, MonthVar == "Mai")
Sommer2<-subset(Df, MonthVar == "Juli")
Sommer3<-subset(Df, MonthVar == "September")
SummerTotal<-rbind(Sommer1,Sommer2,Sommer3)
我很高兴看到这篇文章写得整整齐齐。
更新2-解决方案
这是整齐的方式,如这里Using multiple criteria in subset function and logical operators
Veg_Seas<-subset(Df, subset = MonthVar %in% c("Mai","Juni","Juli","August","September"))
答案 0 :(得分:7)
您可以将日期变量转换为日期(格式)并采用月份:
allmonths <- month(as.Date(Df$DateVariable, format="%Y%m%d"))
请注意,您的列最初是作为factor
导入的,您需要先将其转换为character
:
allmonths <- month(as.Date(as.character(Df$DateVariable), format="%Y%m%d"))
然后您可以检查是否是夏季月份:
summersmonth <- Df[allmonths %in% 6:9, ]
示例:
as.Date("20190702", format="%Y%m%d")
[1] "2019-07-02"
month(as.Date("20190702", format="%Y%m%d"))
[1] 7
答案 1 :(得分:0)
我们可以使用anydate
中的anytime
转换为Date
类,然后提取month
library(anytime)
month(anydate(as.character(Df$DateVariable)))