首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >grouped_df_impl(data,unname(vars),drop)中出错:列未知

grouped_df_impl(data,unname(vars),drop)中出错:列未知
EN

Stack Overflow用户
提问于 2018-05-31 08:18:01
回答 1查看 2K关注 0票数 3

我有一个数据帧,看起来像这样

代码语言:javascript
运行
复制
df <- 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 = rep(c(rep("M",5),rep("NM",5)),2),
  gender = c(rep("M",10), rep("F",10))
)

我正在尝试为许多相似的数据帧生成描述性统计数据,所有这些数据帧都来自不同的来源,因此我可以进行比较。

我正在运行以下代码来获取性别、性别、种族、年龄和性别+种族的计数和比例作为函数,我可以将其应用于多个数据集

代码语言:javascript
运行
复制
Dems_fun <- function(data, sex, eth, dep, age) {

  Fun <- function(data, ...) {
    group_var <- quos(...)

    data %>% 
      group_by(!!! group_var) %>%
      summarise (n = n()) %>%
      mutate(freq = n / sum(n)) %>%
      unite(dem, !!! group_var, sep = "_", remove = T)
  }

  Sex <- Fun(data, sex)
  Sex_eth <- Fun(data, sex, eth) 
  Eth <- Fun(data, eth)
  Dep <- Fun(data, dep)
  Age <- Fun(data, age)

  Dems <- rbind(Sex, Sex_eth, Eth, Dep, Age)
  colnames(Dems) <- c("Category", "count", "percentage")
  return(Dems)
}

当我运行这个函数时

代码语言:javascript
运行
复制
test <- Dems_fun(df, gender, ethnic, dep, age)

我得到以下错误消息:

grouped_df_impl(data,unname(vars),drop)中出现

错误:列sex未知

有没有人能告诉我哪里出错了?

我见过类似的问题Error with using enquo for creating function with ddplyr,但我不知道同样的错误是否适用于我的示例。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-31 09:26:21

唯一缺少的是,您需要取消引用函数的列名,然后在以后将它们用作函数参数时取消对它们的引用(!!)。因此,您将创建age_var <- enquo(age),然后在调用Fun时用!!age_var引用它。

代码语言:javascript
运行
复制
library(tidyverse)

df <- 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 = rep(c(rep("M",5),rep("NM",5)),2),
  gender = c(rep("M",10), rep("F",10))
)

Dems_fun <- function(data, sex, eth, dep, age) {
  # enquo all these variables
  sex_var <- enquo(sex)
  eth_var <- enquo(eth)
  dep_var <- enquo(dep)
  age_var <- enquo(age)

  Fun <- function(data, ...) {
    group_var <- quos(...)

    data %>% 
      group_by(!!! group_var) %>%
      summarise (n = n()) %>%
      mutate(freq = n / sum(n)) %>%
      unite(dem, !!! group_var, sep = "_", remove = T)
  }

  # unquote all these variables
  Sex <- Fun(data, !!sex_var)
  Sex_eth <- Fun(data, !!sex_var, !!eth_var) 
  Eth <- Fun(data, !!eth_var)
  Dep <- Fun(data, !!dep_var)
  Age <- Fun(data, !!age_var)

  Dems <- rbind(Sex, Sex_eth, Eth, Dep, Age)
  colnames(Dems) <- c("Category", "count", "percentage")
  return(Dems)
}

Dems_fun(df, gender, ethnic, dep, age)
#> # A tibble: 18 x 3
#>    Category count percentage
#>    <chr>    <int>      <dbl>
#>  1 F           10        0.5
#>  2 M           10        0.5
#>  3 F_M          5        0.5
#>  4 F_NM         5        0.5
#>  5 M_M          5        0.5
#>  6 M_NM         5        0.5
#>  7 M           10        0.5
#>  8 NM          10        0.5
#>  9 Dep1         4        0.2
#> 10 Dep2         4        0.2
#> 11 Dep3         4        0.2
#> 12 Dep4         4        0.2
#> 13 Dep5         4        0.2
#> 14 40-44        4        0.2
#> 15 45-49        4        0.2
#> 16 50-54        4        0.2
#> 17 55-59        4        0.2
#> 18 60-64        4        0.2

reprex package创建于2018-05-30 (v0.2.0)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50614988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档