代码之家  ›  专栏  ›  技术社区  ›  Laura

尝试创建函数以使用r中的dplyr获取频率计数时对变量进行分组时出错

  •  1
  • Laura  · 技术社区  · 8 年前

    我有一个像这样的数据集

    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

    我想要的输出是一个4x 4的表格,显示水平方向上民族1的计数,垂直方向上民族2的计数,并显示它们匹配的数字和不匹配的数字。

    我想我用的是 quo enquo 不正确。有人能告诉我哪里出错了吗?

    1 回复  |  直到 8 年前
        1
  •  2
  •   akrun    8 年前

    没有“count”变量。应该是'n'。而且,“var”是 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
    
    推荐文章