gpt4 book ai didi

r - 基于 r 中的条件标准进行过滤

转载 作者:行者123 更新时间:2023-12-04 17:44:53 24 4
gpt4 key购买 nike

我的 R 环境中有一个数据框,我想根据特定标准(一种条件过滤器)对其进行子集化。我的数据框是 2004-2014 年之间每一天的每日值的面板数据集。数据框中的每一天都是一个单独的观察。每年有 366 天。我想对数据进行子集化,以便只有闰年在面板数据中保留第 366 天。在那个时间范围内有三个闰年 -2004 年、2008 年、2012 年。我有一个单独的年份和年份的列。换句话说,我需要一个脚本来返回一个没有第 366 天的数据集,但只返回 2004、2008 和 2012 以外的每一年。

我设法通过以下方式完成此操作:我将我的日期和年份列粘贴在一起(例如“2006-366”)并简单地使用 dplyr 的过滤器命令对每年进行子集化(2005-366、2006-366、2007-366、 2009-366、2010-366、2011-366、2013-366、2014-366)。然而,这是一种非常粗糙的方法。我希望有人能在这里指出我正确的方向。这是一些可重复的数据以及我使用的工作流程。

 #Create DF
year<-rep(c(2004:2014), each=366)
day<-rep(c(1:366))
df<-data.frame(day, year)

#My crude method
df $reduc<-paste(df$year, df$day, sep="-")

df <-df %>%
filter(reduc!="2005-366") %>%
filter(reduc!="2006-366") %>%
filter(reduc!="2007-366") %>%
filter(reduc!="2009-366") %>%
filter(reduc!="2010-366") %>%
filter(reduc!="2011-366") %>%
filter(reduc!="2013-366") %>%
filter(reduc!="2014-366")

最佳答案

设置数据:

df  <- expand.grid(year=2004:2014,day=1:366)
nrow(df) ## 4026

现在排除以下情况(年份不能被 4 整除)和(天等于 366)(如果您在数据集中包含 2000 年和/或世纪年,则识别非闰年会更棘手......)
library(dplyr)
df2 <- df %>% filter(!(year %% 4 > 0 & day==366))

关于r - 基于 r 中的条件标准进行过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38315310/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com