Выбор только определенных строк в R(фреймы данных)

#r #dplyr

Вопрос:

У меня есть csv-файл с 3 столбцами year , netInc , Organization . Я хочу очистить данные и рассмотреть только ту Организацию, чьи ценности присутствуют во всех финансовых годах . Например, я хочу рассмотреть все годы между 2000 и 2003 годами (количество = 4) и не хочу данных B и D, так как у него есть данные только за несколько лет . Итак, как я должен это сделать, чтобы получить новый кадр данных, содержащий данные за 2000-2003 годы и 50 тыс. наблюдений?

 Year netInc Org
2000 10     A
2001 20     A
2002 30     A
2003 40     A
2000  5     B
2001  7     B
2000 10     C
2001 20     C
2002 30     C
2003 40     C
2010 10     D
 

Ответ №1:

Мы можем использовать группу filter , т. е. сгруппированную по «Организации», filter только те «Организации», у all которых » Год » с 2000 по 2003 год

 library(dplyr)
df1 %>%
    group_by(Org) %>% 
    filter(all(2000:2003 %in% Year)) %>% 
    ungroup
 

-выход

 # A tibble: 8 x 3
   Year netInc Org  
  <int>  <int> <chr>
1  2000     10 A    
2  2001     20 A    
3  2002     30 A    
4  2003     40 A    
5  2000     10 C    
6  2001     20 C    
7  2002     30 C    
8  2003     40 C    
 

данные

 df1 <- structure(list(Year = c(2000L, 2001L, 2002L, 2003L, 2000L, 2001L, 
2000L, 2001L, 2002L, 2003L, 2010L), netInc = c(10L, 20L, 30L, 
40L, 5L, 7L, 10L, 20L, 30L, 40L, 10L), Org = c("A", "A", "A", 
"A", "B", "B", "C", "C", "C", "C", "D")), 
class = "data.frame", row.names = c(NA, 
-11L))
 

Комментарии:

1. Вы можете даже немного упростить, опустив c(...) ; т. е. Заменить filter(all(c(2000:2003 %in% Year))) на filter(all(2000:2003 %in% Year)) .

2. @banbh спасибо, извините, я не знал, почему я поставил c() , я изначально думал, что 2010 также должен быть там