我有一个关于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