动态更改使用summarise()和complete()创建的列名

时间:2019-10-17 10:44:57

标签: r dplyr tidyr

我正在尝试动态创建一个额外的列。第一段代码按我的意愿工作:

library(dplyr)
library(tidyr)

set.seed(1)

df <- data.frame(animals = sample(c('dog', 'cat', 'rat'), 100, replace = T))

my_fun <- function(data, column_name){

  data %>% group_by(animals) %>%
         summarise(!!column_name := n())

}

my_fun(df, 'frequency')

这里我也使用了完整的功能,但是它不起作用:

library(dplyr)

set.seed(1)

df <- data.frame(animals = sample(c('dog', 'cat', 'rat'), 100, replace = T))

my_fun <- function(data, column_name){

  data %>% group_by(animals) %>%
         summarise(!!column_name := n())%>%
         ungroup() %>%
         complete(animals = c('dog', 'cat', 'rat', 'bat'),
                  fill = list(!!column_name := 0))

}

my_fun(df, 'frequency')

列表函数似乎不喜欢!!column_name :=

有什么我可以做的工作吗?基本上我想输出第二段代码:

animals frequency
bat      0
cat      38
dog      27
rat      35

1 个答案:

答案 0 :(得分:1)

您可以将fill的{​​{1}}参数保留为默认值(这将为您提供缺失的值complete()),然后将其替换为NA

0