使用dplyr中的循环获取频率

使用dplyr中的循环获取频率,r,dplyr,R,Dplyr,我正在尝试使用loop和dplyr包获得每个变量的单独频率表,下面是使用mtcars数据的代码示例: library(dplyr) var= c("vs", "am", "gear") for (i in var){ mtcars %>% group_by(carb) %>% count(i) } 遗憾的是,只有我得到: Error: Column `i` is unknown 我也试过了 for (i in var){ mtcars %>% group_by(carb

我正在尝试使用loop和dplyr包获得每个变量的单独频率表,下面是使用mtcars数据的代码示例:

library(dplyr)

var= c("vs", "am", "gear")

for (i in var){
mtcars %>%
group_by(carb) %>%
count(i)
}
遗憾的是,只有我得到:

Error: Column `i` is unknown
我也试过了

for (i in var){
mtcars %>%
group_by(carb) %>%
summarise_each(funs(n()), i)
}
但不是成功,
请给我任何建议。

对于以编程方式将变量作为字符串传递,您可以使用这些函数的版本,并在末尾加上下划线,例如
计数
分组
,等等

在这种情况下,它将是:

for (i in var){
  mtcars %>%
    group_by(carb) %>%
    count_(i) %>% 
    print()
}
您特别要求为循环提供一个
,但出于您的考虑,这里有一个
lappy
备选方案,它可以更容易地将不同的结果存储在一个地方,以便以后访问:

lapply(var, FUN = function(i) mtcars %>% group_by(carb) %>% count_(i))

要以编程方式将变量作为字符串传递,可以使用这些函数的版本,并在末尾加上下划线,例如
count\u
groupby\u
,等等

在这种情况下,它将是:

for (i in var){
  mtcars %>%
    group_by(carb) %>%
    count_(i) %>% 
    print()
}
您特别要求为
循环提供一个
,但出于您的考虑,这里有一个
lappy
备选方案,它可以更容易地将不同的结果存储在一个地方,以便以后访问:

lapply(var, FUN = function(i) mtcars %>% group_by(carb) %>% count_(i))
我们可以使用
!!sym()
用于变量名。我还建议将结果保存到如下列表中

var <- c("vs", "am", "gear")

library(dplyr)

count_tables <- list()

for (i in var){
  temp <- mtcars %>%
    group_by(carb) %>%
    count(!!sym(i))

  count_tables[[i]] <- temp       
}

count_tables
# $vs
# # A tibble: 8 x 3
# # Groups:   carb [6]
#    carb    vs     n
#   <dbl> <dbl> <int>
# 1     1     1     7
# 2     2     0     5
# 3     2     1     5
# 4     3     0     3
# 5     4     0     8
# 6     4     1     2
# 7     6     0     1
# 8     8     0     1
# 
# $am
# # A tibble: 9 x 3
# # Groups:   carb [6]
#   carb    am     n
#   <dbl> <dbl> <int>
# 1     1     0     3
# 2     1     1     4
# 3     2     0     6
# 4     2     1     4
# 5     3     0     3
# 6     4     0     7
# 7     4     1     3
# 8     6     1     1
# 9     8     1     1
# 
# $gear
# # A tibble: 11 x 3
# # Groups:   carb [6]
#     carb  gear     n
#    <dbl> <dbl> <int>
#  1     1     3     3
#  2     1     4     4
#  3     2     3     4
#  4     2     4     4
#  5     2     5     2
#  6     3     3     3
#  7     4     3     5
#  8     4     4     4
#  9     4     5     1
# 10     6     5     1
# 11     8     5     1
我们可以使用
!!sym()
用于变量名。我还建议将结果保存到如下列表中

var <- c("vs", "am", "gear")

library(dplyr)

count_tables <- list()

for (i in var){
  temp <- mtcars %>%
    group_by(carb) %>%
    count(!!sym(i))

  count_tables[[i]] <- temp       
}

count_tables
# $vs
# # A tibble: 8 x 3
# # Groups:   carb [6]
#    carb    vs     n
#   <dbl> <dbl> <int>
# 1     1     1     7
# 2     2     0     5
# 3     2     1     5
# 4     3     0     3
# 5     4     0     8
# 6     4     1     2
# 7     6     0     1
# 8     8     0     1
# 
# $am
# # A tibble: 9 x 3
# # Groups:   carb [6]
#   carb    am     n
#   <dbl> <dbl> <int>
# 1     1     0     3
# 2     1     1     4
# 3     2     0     6
# 4     2     1     4
# 5     3     0     3
# 6     4     0     7
# 7     4     1     3
# 8     6     1     1
# 9     8     1     1
# 
# $gear
# # A tibble: 11 x 3
# # Groups:   carb [6]
#     carb  gear     n
#    <dbl> <dbl> <int>
#  1     1     3     3
#  2     1     4     4
#  3     2     3     4
#  4     2     4     4
#  5     2     5     2
#  6     3     3     3
#  7     4     3     5
#  8     4     4     4
#  9     4     5     1
# 10     6     5     1
# 11     8     5     1
count\(
已弃用。请将
count
tidyeval
()一起使用。
count()不推荐使用。请将
count
tidyeval
()一起使用。