【发布时间】:2019-06-14 20:22:51
【问题描述】:
我正在尝试将两组列名传递给函数并使用 dplyr 对它们进行处理。通常对于一组我会使用省略号 (...) 并使用 enquos() 将其转换为 quosures。但是现在我有两组列名,所以我考虑使用列表来存储它们。我应该如何以最有效的方式完成这项工作? (欢迎使用 purrr、rlang 和任何其他包的功能回答)
数据包和示例
library(dplyr) #I use whole library(tidyverse) but this is sufficient for this case
some.data <- tibble(col1 = sample(letters[1:3], 500, replace = T),
col2 = sample(letters[1:3], 500, replace = T),
col3 = sample(letters[4:6], 500, replace = T),
col4 = sample(letters[4:6], 500, replace = T))
我的函数(简单来说)如下所示:
cross_table <- function(data = NULL, list1 = NULL, list2 = NULL){
for(l1 in list1){
for(l2 in list2){
data.out <- data %>%
count(l1, l2) %>%
spread(l2, n, fill = 0, drop = FALSE)
print(data.out) #Just to show it works. I want to use 'data.out' object later on
}
}
}
我想使用这样的函数(不将列名作为字符串)
some.data %>%
cross_table(list1 = list(col1, col2), list2 = list(col3, col4))
【问题讨论】: