如何在 R 中排除 group_by 中的值

Posted

技术标签:

【中文标题】如何在 R 中排除 group_by 中的值【英文标题】:How to exclude values in group_by in R 【发布时间】:2021-12-24 04:40:11 【问题描述】:

我正在尝试对变量进行分组 v_435 (1, 2, 3, 4, 5, 98, 99) 从数据集 ARR2 到 v_435_low(包括变量 1 和 2) 和 v_435_high(包括变量 4 和 5)。

很遗憾,我不知道如何为 v_435_high 排除 98 和 99。

我的代码:

# v_435_low
ARR2%>%
  group_by(v_435<=2) %>%
  summarize(n=n())%>%
  mutate(freq = n / sum(n) )

# v_435_high
ARR2%>%
  group_by(**????????????**) %>%
  summarize(n=n())%>%
  mutate(freq = n / sum(n) )

【问题讨论】:

在我看来,创建一个为您进行分组的新变量(使用您概述的标准)会更容易,然后在该新变量上使用 group_by。这对您来说是一种合理的方法吗? 3 落在哪里?你说 1-2 -> 低,4-5 -> 高。 3 呢? 感谢您的快速回答。不幸的是,我是一个初学者,所以我什至不确定如何使用概述的标准创建一个变量。 3会因为理论上的原因被踢出去。但是我找不到不选择 98 和 99 来为变量选择 4 和 5 的方法。 你好@martis。欢迎来到 SO!请提供minimal reproducible example,以便其他 SO 用户可以为您提供最佳帮助。谢谢。 【参考方案1】:

更新group_by 行以仅包含 4 和 5:

library(tidyverse)

# simulating some of my own data
ARR2 <- tibble(
  v_435 = sample(c(1:5, 98, 99), size = 100, replace = TRUE)
)

ARR2 %>%
  group_by(v_435 %in% c(4, 5))

【讨论】:

感谢您的帮助!假设我想保留在 tidyverse 管道逻辑中,因为我想将 v_435 的 1+2 答案(低)和 4+5 答案(高)分组,然后继续计算:有没有办法将这两个值分别分组为使用 group_by() 变量?热烈的问候 我提供的答案已经在 tidyverse 管道逻辑中。 mutate 行创建了一个名为v_435_groups 的新变量,然后您可以随心所欲地使用它。我不确定您是否完全掌握 group_by 的作用,这并不意味着将值合并到一个组中。 如果您真的只是想从您的问题中寻找group_by 中的内容,那么您正在寻找group_by(v_435 %in% c(4, 5)) 非常感谢,这正是我想要的! :) 好吧,很公平。我更新了我的答案以反映你在寻找什么。

以上是关于如何在 R 中排除 group_by 中的值的主要内容,如果未能解决你的问题,请参考以下文章

在 R 中使用 dplyr 在 group_by 之后应用自定义函数

在 R 中,如何根据一列的值对所有其他列求和,而不指定列名?

如何使用 R 和 dplyr 中连续的元素执行 group_by

如何在使用 SQL 的重复搜索中排除其他值中的值

如何通过 group_by 中的 group-number 对数据表进行编号/标记?

使用 group_by、summary 和 max() 循环 R 中的字符向量