我想根据count和id列的编号删除整个组的行。
id count group
1 244 1 black
2 244 2 black
3 244 3 black
4 333 1 black
5 333 2 black
6 582 1 yellow
7 582 2 yellow
8 582 3 yellow
9 676 10 yellow
10 676 11 yellow
11 676 12 yellow
例如,黑色组有两个id因子(244
和333
),它们分别以计数1
(1, 2, 3
和1, 2
开头)。
但是,群组黄色还有两个ID因子(582
和676
),但其第二个ID 676
不以count {{1}开头(以1
开头)。因此,我想在数据框中删除所有行的黄色。
期望的输出:
10
创建数据框的代码:
id count group
1 244 1 black
2 244 2 black
3 244 3 black
4 333 1 black
5 333 2 black
我正在摸索如何实现这一目标,但它没有点击我。
更新了示例
id = as.factor(c(244, 244, 244, 333, 333,
582, 582, 582, 676, 676, 676))
count = c(1, 2, 3, 1, 2, 1, 2, 3, 10, 11, 12)
group = as.factor(c("black", "black", "black", "black", "black",
"yellow", "yellow","yellow", "yellow", "yellow", "yellow"))
df = data.frame(id, count, group)
代码:
id id2 count group
1 244 81308991 1 black
2 244 97881213 2 black
3 244 84929200 3 black
4 333 59742977 1 black
5 333 25048598 2 black
6 582 30902503 1 yellow
7 582 62598100 2 yellow
8 582 33639927 3 yellow
9 676 13531041 10 yellow
10 676 15731681 11 yellow
11 676 49423609 12 yellow
答案 0 :(得分:2)
您可以使用ave
仅使用基础R执行此操作。诀窍是通过min
为子组找出count
id
值,然后再次找出计算max
的{{1}} min
。如果两个值均为1,则您希望保留它们。
group
注意:正如Frank评论的那样,如果同一个df[ave(ave(df$count, df$id, FUN = min), df$group, FUN = max) == 1,]
# id count group
#1 244 1 black
#2 244 2 black
#3 244 3 black
#4 333 1 black
#5 333 2 black
出现在多个id
中,请务必使用group
以及df$id
}在内部df$group
答案 1 :(得分:1)
我们需要先计算是否有一个组不是以1开头,然后过滤整个data.frame。这里是dplyr
的非最优解决方案{{1}}
答案 2 :(得分:0)
您可以加载filter()
dplyr
包中的tidyverse
功能
library(tidyverse)
df1 <- df %>%
filter(group != "yellow")
> df1
id count group
1 244 1 black
2 244 2 black
3 244 3 black
4 333 1 black
5 333 2 black