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

Subset a dataframe based on numerical values of a string inside a variable

我有一个数据框,它是从 1961 年到 2018 年每月分辨率的气象测量时间序列。我对测量月平均温度的变量感兴趣,因为我需要夏季的多年平均温度.

为此,我必须从 "DateVaraible" 列中过滤掉第五和第六位数字,即月份。 时间列中的值格式如下 “19610701”。所以我需要1961之后的07(Juli)

我为了其他目的开始编码 1 个月,所以我没有尝试任何值得一提的事情。我想 .grepl 可以完成这项工作,但我不知道 "matching" 运算符是如何工作的。

所以我开始使用这段有效的代码。

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 到 September select 个月。 获得我想要的结果的一个可怕的方法是在之后做几个 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"))

您可以将日期变量转换为日期(格式)并取月份:

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

我们可以使用anydateanytime转换为Dateclass然后提取month

library(anytime)
month(anydate(as.character(Df$DateVariable)))