在dplyr中仅通过一个变量进行分组后取消组合

时间:2017-07-28 08:47:47

标签: r dplyr

我有很多重复测量的单位

>df
Item value  year
1     20     1990
1     20     1991
2     30     1990
2     15     1990
2     5      1991
3     10     1991
4     15     1990
5     10     1991
5      5     1991

我正在尝试使用dplyr删除观察次数较少的值。在这个玩具数据上可以说我想删除少于2个计数的数据

>df <- df %>% 
  group_by(Item) %>% 
  tally() %>% 
  filter(n>1)

Item  n
1     2
2     3
5     2

问题在于我想将其扩展回原来的状态,但使用此过滤器。我尝试使用ungroup命令,但这似乎只有在按两个变量分组时才有效。如何根据项目计数进行过滤,然后获取原始变量,即valueyear。看起来应该是这样的

>df
Item value  year
1     20     1990
1     20     1991
2     30     1990
2     15     1990
2     5      1991
5     10     1991
5      5     1991

1 个答案:

答案 0 :(得分:13)

更简单地说,使用dplyr的row_number()

library(dplyr)

df <- read.table("clipboard", header = TRUE, stringsAsFactors = FALSE)

df %>% 
  group_by(Item) %>% 
  filter(max(row_number()) > 1) %>%
  ungroup()

# A tibble: 7 x 3
# Groups:   Item [3]
   Item value  year
  <int> <int> <int>
1     1    20  1990
2     1    20  1991
3     2    30  1990
4     2    15  1990
5     2     5  1991
6     5    10  1991
7     5     5  1991