根据其他列中的因子删除组

时间:2017-03-03 16:00:55

标签: r dataframe conditional

我想根据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因子(244333),它们分别以计数11, 2, 31, 2开头)。

但是,群组黄色还有两个ID因子(582676),但其第二个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

3 个答案:

答案 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