Удалить наблюдение на основе появления в панельных данных

#r #panel-data

Вопрос:

Я работаю с данными панели, и я хочу сохранить наблюдения за идентификатором, который в первый раз v_1=1 не является первым для конкретного идентификатора. Своего рода команда bysort в stata В примере я хочу сохранить только 61312 obs, а не 42848

Спасибо

 dd <- read.table(text="
id      year    v_1  
61312   2015    0    
61312   2016    0    
61312   2017    1    
61312   2018    1       
42848   2016    1       
42848   2017    0", header=TRUE) 
 

Ответ №1:

Вы можете использовать group_by и filter от dplyr , чтобы помочь с этой задачей

 library(dplyr)
dd %>% 
  group_by(id) %>% 
  filter(first(v_1) != 1)
 

мы используем group_by , поэтому, когда мы используем first() , он смотрит на первые значения для каждого id

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

1. Хорошо, спасибо, кажется, это работает. Как узнать, как отсортировать его по переменной года?

2. Данные уже были отсортированы по годам. Если бы это было не так, вы могли бы использовать arrange(year) , прежде чем делать filter()

Ответ №2:

Вы можете использовать —

 subset(dd, id %in% unique(id)[v_1[!duplicated(id)] != 1])

#     id year v_1
#1 61312 2015   0
#2 61312 2016   0
#3 61312 2017   1
#4 61312 2018   1
 

v1[!duplicated(id)] сохраняет только первое v1 значение каждого id из них, и мы выбираем только те id , у которых это первое значение не равно 1.