根据面板数据中的出现删除观察

Remove observation based on occurrence in panel data

我正在处理面板数据 我想保留对 id 的观察,即第一次 v_1=1 不是特定 id 的第一次。 stata中的一种bysort命令 在这个例子中我只想保留 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) 

您可以使用 dplyr 中的 group_byfilter 来帮助完成此任务

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

我们使用 group_by 所以当我们使用 first() 时它会查看每个 id

的第一个值

你可以使用-

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)] 仅保留每个 id 的第一个 v1 值,而我们 select 仅保留第一个值不相等的那些 id到 1.