我的数据集涉及大量列连接(8-12),同时根据情况,可能不需要这些列中的1-3个。
目前我一直在使用dplyr编写这些长组,但是有很多列和不断变化的情况,很容易拼错或忘记列。
我想以某种方式创建一个与此相关的变量,但是由于我尝试使用粘贴时出现的引号,我无法弄清楚如何。谁能告诉我一个如何做到这一点的快速示例?
例如:
library(dplyr)
# I want this group-list not to have quotes so I can drop in my group_by below
my_group_list = paste0("vs"," ","am") #quotes get in the way
mtcars %>% group_by(my_group_list) %>% summarise(countofvalues = n())
答案 0 :(得分:1)
如果有很多列,我们可以直接对列名称进行分组,指定要分组的列。在这种情况下,请使用group_by_
library(dplyr)
mtcars %>%
group_by_(.dots=names(.)[8:9]) %>%
summarise(countofvalues = n())
# vs am countofvalues
# (dbl) (dbl) (int)
#1 0 0 12
#2 0 1 6
#3 1 0 7
#4 1 1 7
如果我们有vector
的值
my_group_list <- c("vs", "am")
mtcars %>%
group_by_(.dots = my_group_list) %>%
summarise(countofvalues = n())
# vs am countofvalues
# (dbl) (dbl) (int)
#1 0 0 12
#2 0 1 6
#3 1 0 7
#4 1 1 7
由于OP提到它没有进行分组,我们可以通过unite
'vs'和'am'列对其进行测试,将其用作分组变量,然后执行n()
library(tidyr)
mtcars %>%
unite(vs_am, vs, am) %>%
group_by(vs_am) %>%
summarise(countofvalues = n())
# vs_am countofvalues
# (chr) (int)
#1 0_0 12
#2 0_1 6
#3 1_0 7
#4 1_1 7
答案 1 :(得分:1)
我知道这是一个非常陈旧的话题,但是我偶然发现了这个话题,并找到了最近的答案。您可以使用group_by_at()
并整理选择助手(我在此dplyr
issue上找到了它)。例如:
my_group_list <- c("vs", "am")
mtcars %>%
group_by_at(all_of(my_group_list)) %>%
summarise(countofvalues = n())
# `summarise()` regrouping output by 'vs' (override with `.groups` argument)
# A tibble: 4 x 3
# Groups: vs [2]
# vs am countofvalues
# <dbl> <dbl> <int>
# 1 0 0 12
# 2 0 1 6
# 3 1 0 7
# 4 1 1 7