如何指定和清理/删除行?
例如,这里是数据框。如果每个 ProjectNumber 中的年龄差小于 5,我想删除这些行。在 ProjectNumber = 1 内,年龄差为 6(56-50),因此保留 ProjectNumber 1 中的行。在 ProjectNumber2 中,年龄差为 2(37-35),因此将删除 ProjectNumber 2 中的 3 行。我怎样才能做到这一点?实际数据集中有数千个项目编号,因此无法真正手动完成。关键问题是如何指定这些行并删除它们。谢谢你。
| 项目编号 | 年龄 |
|---|---|
| 1 | 50 |
| 1 | 52 |
| 1 | 53 |
| 1 | 55 |
| 1 | 56 |
| 2 | 35 |
| 2 | 36 |
| 2 | 37 |
| 3 | 40 |
| 3 | 41 |
| 3 | 42 |
| 3 | 43 |
| 3 | 45 |
| 3 | 46 |
回答
基础 R 变体:
-
aggregate然后merge。如果您有多个“密钥”(ProjectNumber此处),则此版本很好。keep <- subset(aggregate(Age ~ ProjectNumber, data = df1, FUN = function(z) diff(range((z))) >= 5), Age) keep # ProjectNumber Age # 1 1 TRUE # 3 3 TRUE merge(df1, keep[,1,drop=FALSE], by = "ProjectNumber") # ProjectNumber Age # 1 1 50 # 2 1 52 # 3 1 53 # 4 1 55 # 5 1 56 # 9 3 40 # 10 3 41 # 11 3 42 # 12 3 43 # 13 3 45 # 14 3 46 -
aggregate然后%in%:### 'keep' from above subset(df1, ProjectNumber %in% keep$ProjectNumber) -
ave然后是简单的子集:keep <- ave(df1$Age, df1$ProjectNumber, FUN = function(z) diff(range(z)) >= 5) > 0 keep # [1] TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE TRUE df1[keep,] # ProjectNumber Age # 1 1 50 # 2 1 52 # 3 1 53 # 4 1 55 # 5 1 56 # 9 3 40 # 10 3 41 # 11 3 42 # 12 3 43 # 13 3 45 # 14 3 46