【问题标题】:Ungroup after grouping by just one variable in dplyr在 dplyr 中仅按一个变量分组后取消分组
【发布时间】:2017-07-28 08:47:46
【问题描述】:

我有很多被重复测量的单位。

>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

【问题讨论】:

  • 尝试改用add_tally()。或者只是filter(n() &gt; 1)group_by() 之后。
  • @AndreyKolyadin - 您应该将其添加为答案

标签: r dplyr


【解决方案1】:

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

【讨论】:

  • 你可以用n()代替max(row_number())
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-15
  • 1970-01-01
  • 1970-01-01
  • 2019-08-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多