#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.