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

Ale*_*lex 11 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
Run Code Online (Sandbox Code Playgroud)

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

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

Item  n
1     2
2     3
5     2
Run Code Online (Sandbox Code Playgroud)

问题是我希望将其扩展回原来的状态,但是使用此过滤器.我试图使用该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
Run Code Online (Sandbox Code Playgroud)

r.b*_*bot 14

更简单地说,使用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
Run Code Online (Sandbox Code Playgroud)

  • 您可以使用`n()`而不是`max(row_number())` (7认同)