r-如何将lapply与传递到双向tabyl的列列表一起使用



我正在尝试使用lapply()来创建多个交叉表,使用tabyl()函数,我非常喜欢并且很熟悉它。我更喜欢这种格式,这样我就可以用它做其他事情了

然而,我只能让lapply()使用单向tabyl(),比如

list_cars <- c("cyl", "gear")
lapply(list_cars, function(w) tabyl(mtcars, w))

这就是输出:

[[1]]
cyl  n percent
4 11 0.34375
6  7 0.21875
8 14 0.43750
[[2]]
gear  n percent
3 15 0.46875
4 12 0.37500
5  5 0.15625

然而,我想这样做,但使用双向tabyl(),所以本质上显示tabyl(mtcars, cyl, carb)tabyl(mtcars, gear, carb),所以使用carb作为";通过";变量

我想要的是这样的:

cyl 1 2 3 4 6 8
4 5 6 0 0 0 0
6 2 0 0 4 1 0
8 0 4 3 6 0 1
gear 1 2 3 4 6 8
3 3 4 3 5 0 0
4 4 4 0 4 0 0
5 0 2 0 1 1 1

当我尝试这个:

lapply(list_cars, function(w) tabyl(mtcars, w, carb))

我得到错误:

Error: Must group by variables found in `.data`.
* Column `w` is not found.

我也尝试过各种各样的其他变体,但没有得到任何效果。

lapply(list_cars, function(w, disp) tabyl(mtcars, w, carb)) ## Nope
lapply(list_cars, function(x, disp) tabyl(mtcars, {{x}}, {{carb}})) ## Very wrong
lapply(list_cars, function(v) paste0("tabyl(mtcars, ", v, ", disp)") %>% as.formula())  ## Also seems very wrong

我似乎找不到其他类似的问题,也找不到任何使用tabyl()的人。任何帮助都将不胜感激!谢谢

将列名作为字符串变量传递时使用.data

library(janitor)
list_cars <- c("cyl", "gear")
lapply(list_cars, function(w) tabyl(mtcars, .data[[w]], carb))
#[[1]]
# cyl 1 2 3 4 6 8
#   4 5 6 0 0 0 0
#   6 2 0 0 4 1 0
#   8 0 4 3 6 0 1
#[[2]]
# gear 1 2 3 4 6 8
#    3 3 4 3 5 0 0
#    4 4 4 0 4 0 0
#    5 0 2 0 1 1 1

最新更新