r - 有条件删除面板数据

标签 r dataframe dplyr filtering grouping

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

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 + 子集的基本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

关于r - 有条件删除面板数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68657056/

相关文章:

r - 连接 R 上数据集的行,按另一列进行分组

json - 使用 list.files 在 R 中读取带重音的文件名

Python 将大型 numpy 数组转换为 pandas 数据框

r - 根据函数变量的值有条件地将图层添加到 ggplot

r - 将两组列名称传递给函数

sql - RODBC 错误 : Could not SQLExecDirect

r - ggplot2 中不同颜色的分组条形图

python - 从 pd 数据帧获取联合概率

python - 从具有 txt 中指定标签的字典构建数据框

R Dplyr Ifelse 按组