条件下拉面板数据

Conditional Drop Panel data

我正在处理如下所示的横截面数据集:

Id Year  Age 
1  2003  20  
1  2003  20  
1  2003  20  
2  2003  35   
2  2003  37   
2  2003  42  
3  2003  55   
3  2003  55   
3  2003  55   

为了减少我的样本中由于 Id 分配错误而导致的测量错误,我需要只保留具有相同年龄的个体,如果没有出现这种情况则丢弃。

我正在寻找的输出是:

Id Year  Age 
1  2003  20  
1  2003  20  
1  2003  20  
3  2003  55   
3  2003  55   
3  2003  55   

你有什么建议吗?

使用 ave + subset

的基础 R 选项
subset(
  df,
  ave(Age,Id,Year,FUN = var)==0
)

给予

  Id Year Age
1  1 2003  20
2  1 2003  20
3  1 2003  20
7  3 2003  55
8  3 2003  55
9  3 2003  55

一个可能的 dplyr 选项

df %>%
  group_by(Id, Year) %>%
  filter(n_distinct(Age) == 1) %>%
  ungroup()

给予

# A tibble: 6 x 3
     Id  Year   Age
  <int> <int> <int>
1     1  2003    20
2     1  2003    20
3     1  2003    20
4     3  2003    55
5     3  2003    55
6     3  2003    55