根据变量内字符串的数值对数据帧进行子集化
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
我们可以使用anydate
从anytime
转换为Date
class然后提取month
library(anytime)
month(anydate(as.character(Df$DateVariable)))
我有一个数据框,它是从 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
我们可以使用anydate
从anytime
转换为Date
class然后提取month
library(anytime)
month(anydate(as.character(Df$DateVariable)))