R如何做这个stata代码:按panel_key(t),排序:如果_N == 2则保留?

R how to do this stata code: by panel_key (t), sort: keep if _N == 2?

我有一个名为“组合”的 df,其中存储了预实验和 post 实验观察结果。观察结果像这样相互堆叠:

panel_key <- c(123, 123, 456, 456, 789, 789, 147, 147, 258)
t <- c(0,1,0,1,0,1,0,0,0)
treatment<- c(0,0,1,1,2,2,1,2,1)
dependantvar <- c(1,2,2,1,3,4,1,2,4)
df <- data.frame(panel_key, t, treatment, dependantvar)

t 表示 pre (0) 和 post (1) 和 panel_key 索引个体。有些人在治疗前有相同的panel_key。这里的objective是匹配panel_key只有在t=0和t=1处相同。另一种思考方式是,我想删除 t=0 处的所有行,这些行在 t=1.

处没有匹配的 panel_key

简单的 tidyverse 解决方案

library(tidyverse)

panel_key <- c(123, 123, 456, 456, 789, 789, 147, 147, 258)
t <- c(0,1,0,1,0,1,0,0,0)
treatment<- c(0,0,1,1,2,2,1,2,1)
dependantvar <- c(1,2,2,1,3,4,1,2,4)
df <- data.frame(panel_key, t, treatment, dependantvar)


detect_0_1 <- function(vector) {
  all(c(0,1) %in% vector)
}

df %>% 
  group_by(panel_key) %>% 
  filter(detect_0_1(t))