R语言 如果任何值大于X,则删除一组值

rjzwgtxy  于 2023-03-27  发布在  其他
关注(0)|答案(2)|浏览(143)

我希望能够删除一组行(使用group_by),这是基于该组中一个或多个小于X的单元格(在本例中为7)
我有以下示例 Dataframe :

df <- structure(list(
  group_id = c(1, 1, 1, 2, 2, 2, 3, 3, 3), 
  value = c(1, 2, 3, 4, 5, 6, 7, 8, 9),
  .Names = c("group_id", "value"),
  row.names = c(NA, -9L),
  class = "data.frame")

输出:
| 组标识|价值|
| - ------|- ------|
| 1个|1个|
| 1个|第二章|
| 1个|三个|
| 第二章|四个|
| 第二章|五个|
| 第二章|六个|
| 三个|七|
| 三个|八个|
| 三个|九|
我想删除任何包含至少一个大于7的'value'单元格的组(按group_id分组),所以它看起来像这样:
| 组标识|价值|
| - ------|- ------|
| 1个|1个|
| 1个|第二章|
| 1个|三个|
| 第二章|四个|
| 第二章|五个|
| 第二章|六个|
因此,组3被移除,因为它包含1个或多个大于7的值
我已经使用了下面的代码,但它没有删除第7行(group_id = 3,value = 7)

library(dplyr)
df2 <- df %>% 
  group_by(group_id) %>% 
  filter(value <7)
qzwqbdag

qzwqbdag1#

我们可以用any Package

library(dplyr) #version >= 1.1.0
df %>% 
  filter(!any(value > 7), .by = group_id)
  • 输出
group_id value
1        1     1
2        1     2
3        1     3
4        2     4
5        2     5
6        2     6

数据

df <- structure(list(group_id = c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L
), value = 1:9), class = "data.frame", row.names = c(NA, -9L))
fwzugrvs

fwzugrvs2#

library(dplyr)
library(tidyr)

df |> 
  group_by(group_id) |> 
  # add a variable to see if the condition is satisfied
  mutate(check_filter = if_else(value < 7, TRUE, NA)) |> 
  # apply that condition to the other rows for that id
  fill(check_filter) |> 
  ungroup() |> 
  filter(check_filter) |> 
  select(-check_filter)

相关问题