我有一个看起来像这样的数据集
df1 <- data.frame (
age = rep(c("40-44", "45-49", "50-54", "55-59", "60-64"),4),
dep = rep(c("Dep1", "Dep2", "Dep3", "Dep4", "Dep5"),4),
ethnic_1 = c(rep("M",4),rep("NM",7),rep("P", 3), rep("A", 6)),
ethnic_2 = c(rep("M",8),rep("NM",6),rep("P",2),rep("A", 4)),
gender = c(rep("M",10), rep("F",10))
)
我想做的是通过创建并运行以下函数来比较这些数据框中的两种种族分类
Comp_fun <- function(data, var1, ...) {
group_var <- quos(...)
var_quo <- enquo(var1)
df <- data %>%
group_by(!!! group_var) %>%
summarise (n = n()) %>%
spread(key = !!! var_quo, value = count)
return(df)
}
eth_comp <- Comp_fun(df1, ethnic_1, ethnic_1, ethnic_2)
运行此代码时,收到以下错误消息Error: Invalid column specification
我要从中输出的是一个4 x 4的表格,显示水平1个种族的数量,垂直2个种族的数量,并显示匹配的数字和不匹配的数字t。
我认为我错误地使用了quo
enquo
。谁能告诉我我要去哪里错了?
答案 0 :(得分:2)
没有“ count”变量。它应该是“ n”。另外,“ var_quo”是quosure
而不是quosures
。因此,可以使用!!
Comp_fun <- function(data, var1, ...) {
group_var <- quos(...)
var_quo <- enquo(var1)
data %>%
group_by(!!! group_var) %>%
summarise (n = n()) %>%
spread(key = !! var_quo, value = n)
}
eth_comp <- Comp_fun(df1, ethnic_1, ethnic_1, ethnic_2)
eth_comp
# A tibble: 4 x 5
# ethnic_2 A M NM P
# <fct> <int> <int> <int> <int>
#1 A 4 NA NA NA
#2 M NA 4 4 NA
#3 NM NA NA 3 3
#4 P 2 NA NA NA