将变量传递给循环中的dplyr :: count

时间:2017-09-15 16:52:51

标签: r dplyr

我正在尝试在一个数据集中的任意一组变量上运行[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]。如果我为每个变量手动运行dplyr::count()一次,我会得到预期的结果。但是当我尝试将count()置于for循环中以自动为一组变量中的每个变量运行它时,我收到了一个错误。似乎问题在于我如何在for循环中将变量传递给count()。我知道count()取消引用其变量,无论出于什么原因,R都无法判断我传递的是变量。

我已经尝试了很多方法来解决这个问题,包括将变量传递为count()data$var1quo(var1)enquo(var1)var1“var1”quo(data$var1)以及使用enquo(data$var1)取消选中迭代器。我还尝试将!!的参数指定为count(),但这导致count(x=data, var=i)返回数据中的总行数作为每次迭代的计数。如果您对导致错误的原因或我如何解决错误有任何想法,我将非常感谢听到它们!

这是一个可重复性最小的示例,它依赖于count()中包含的lakers数据集。

lubridate

2 个答案:

答案 0 :(得分:7)

这有效:

myData[myCols] %>% tidyr::gather(var, value) %>% count(var, value)

# A tibble: 407 x 3
         var value     n
       <chr> <chr> <int>
 1 game_type  away 17153
 2 game_type  home 17471
 3  opponent   ATL   904
 4  opponent   BOS   886
 5  opponent   CHA   412
 6  opponent   CHI   964
 7  opponent   CLE   822
 8  opponent   DAL  1333
 9  opponent   DEN  1855
10  opponent   DET   845
# ... with 397 more rows

如果你想以愚蠢的方式传递myCols,你必须查找rlang包。

答案 1 :(得分:4)

来自:https://github.com/tidyverse/dplyr/blob/master/vignettes/programming.Rmd

如果您有一个由变量名组成的字符向量,并希望通过for循环对其进行操作,请索引到特殊的.data代词:

for (var in names(mtcars)) {
  mtcars %>% count(.data[[var]]) %>% print()
}