错误:grouped_df_impl中的错误(数据,未命名(变量),删除):列“ col1”未知

时间:2019-01-14 06:07:42

标签: r function group-by dplyr tidyverse

错误:grouped_df_impl(数据,未命名(变量),删除)错误:列col1未知

pivot <- function(df, col1, col2){
  df %>%
    group_by(col1, col2) %>%
    summarise(n = n()) %>%
    spread(col2, n, fill = 0)
}

运行命令pivot (iris, Species, Petal.Width)

谁能说出此错误消息的原因?以及解决方法

2 个答案:

答案 0 :(得分:2)

您需要使用group_by_进行编程。

library(tidyverse)
pivot <- function(df, col1, col2){
  df %>%
    group_by_(col1, col2) %>%
    summarise(n = n()) %>%
    spread(col2, n, fill = 0)
}

pivot (iris, "Species", "Petal.Width")

这也应该起作用。无需在此处引用这些列。

pivot <- function(df, col1, col2) {
  group_var1 <- enquo(col1)
  group_var2 <- enquo(col2)
  df %>% 
    group_by(!!group_var1, !!group_var2) %>% 
    summarise(n = n())
}

pivot (iris, Species, Petal.Width)

我认为第二个输出更容易阅读。

有关更多信息,请参见dplyr: How to use group_by inside a function?https://dplyr.tidyverse.org/articles/programming.html

答案 1 :(得分:1)

另一个答案是:

pivot <- function(df, col1, col2){
  col1<-deparse(substitute(col1))
  col2<-deparse(substitute(col2))
  df %>%
    group_by_(col1, col2) %>%
    summarise(n = n()) %>%
    spread(col2, n, fill = 0)
}

pivot (iris, Species, Petal.Width)