r-如果公司在某个日期范围内,请保持观察



我有一个关于r中子集的问题。因此,例如,如果一家公司在2000年至2005年间进行了观察,那么该公司就必须被删除。

fiscal_year <- c(2000, 2001, 2002, 2003, 2004, 2005, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019)
fkey <- c(1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2)
df <- data.frame(fiscal_year, fkey)

我想要的结果是只保留公司2的20个固定年份的观察结果。到目前为止,我在R中尝试了几个命令:

df <- df %>%
group_by(fkey) %>% 
subset(fiscal_year==2000 & fiscal_year==2001 & fiscal_year==2002 & fiscal_year==2003 & fiscal_year==2004 & fiscal_year==2005 & fiscal_year==2006 & fiscal_year==2007 & fiscal_year==2008 & fiscal_year==2009 & fiscal_year==2010 & fiscal_year==2011 & fiscal_year==2012 & fiscal_year==2013 & fiscal_year==2014 & fiscal_year==2015 & fiscal_year==2016 & fiscal_year==2017 & fiscal_year==2018 & fiscal_year==2019)

但这个命令删除了所有公司。

df <- df %>%
group_by(fkey) %>%
subset(fiscal_year>=2000 & fiscal_year<=2019)

但这个命令让所有的公司都能保住。

所以,我不知道如何更改它的工作命令!

希望一切都清楚,如果没有,请评论!

试试这个

firms <- unique(df$fkey)
for (i in 1:length(firms)){
df_firm <- df[df$fkey == firms[i],]
if (min(df_firm$fiscal_year) > 2000 | max(df_firm$fiscal_year) < 2019){
df$fiscal_year[df$fkey == firms[i]] <- NA
}
}
df <- df[complete.cases(df),] #remove years with NA

您可以使用all来保留从2000年到2019年的所有年份的公司。

library(dplyr)
df %>%
group_by(fkey) %>%
filter(all(2000:2019 %in% fiscal_year)) %>%
ungroup -> result
result
#   fiscal_year  fkey
#         <dbl> <dbl>
# 1        2000     2
# 2        2001     2
# 3        2002     2
# 4        2003     2
# 5        2004     2
# 6        2005     2
# 7        2006     2
# 8        2007     2
# 9        2008     2
#10        2009     2
#11        2010     2
#12        2011     2
#13        2012     2
#14        2013     2
#15        2014     2
#16        2015     2
#17        2016     2
#18        2017     2
#19        2018     2
#20        2019     2

最新更新