R 如何将lappy与传递给双向tabyl的列列表一起使用
我正在尝试使用R 如何将lappy与传递给双向tabyl的列列表一起使用,r,lapply,janitor,R,Lapply,Janitor,我正在尝试使用lappy()创建多个交叉表,使用tabyl()函数,我非常喜欢并且非常熟悉该函数。我更喜欢这种格式,这样我可以继续用它做其他事情 但是,我只能让lappy()使用单向tabyl()这样: list_cars <- c("cyl", "gear") lapply(list_cars, function(w) tabyl(mtcars, w)) 但是,我想这样做,但是使用双向tabyl(),因此本质上显示tabyl(mtcars,cyl
lappy()
创建多个交叉表,使用tabyl()
函数,我非常喜欢并且非常熟悉该函数。我更喜欢这种格式,这样我可以继续用它做其他事情
但是,我只能让lappy()
使用单向tabyl()
这样:
list_cars <- c("cyl", "gear")
lapply(list_cars, function(w) tabyl(mtcars, w))
但是,我想这样做,但是使用双向tabyl()
,因此本质上显示tabyl(mtcars,cyl,carb)
和tabyl(mtcars,gear,carb)
,因此使用carb
作为“by”变量
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
我想要的是这样的:
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
图书馆(看门人)
列出你的车谢谢!!这正是我想要的。你知道为什么当它只是一个单向tabyl时不使用.data[[w]]是可以的吗?我自己也很惊讶。可以使用tabyl(mtcars,“cyl”)
但不能使用tabyl(mtcars,“cyl”,“gear”)
。我在文档中找不到任何相关的东西。知道我没有发疯或错过一些明显的东西至少让我感到安慰!