根据变量内的字符串的数值对数据框进行子集

时间:2019-07-02 12:40:19

标签: r dataframe time-series subset as.date

我有一个数据框,它是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"))

2 个答案:

答案 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)))