【问题标题】:Keep firms observation if they are between a certain date range如果它们在某个日期范围内,请保持公司观察
【发布时间】:2021-08-27 12:11:57
【问题描述】:

我对 r 中的子集有疑问。我有一个大型数据集,我只想保留公司,如果他们有 2000 年到 2019 年的观察结果。因此,如果公司有例如 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)

但是这个命令会保留所有的公司。

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

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

【问题讨论】:

标签: r group-by subset


【解决方案1】:

您可以使用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

【讨论】:

    【解决方案2】:

    试试这个

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多