我正在尝试使用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