我有很多重复测量的单位

>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

最佳答案

更简单地说,使用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

10-06 03:44