我正在尝试动态创建一个额外的列。第一段代码按我的意愿工作:
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
答案 0 :(得分:1)
您可以将fill
的{{1}}参数保留为默认值(这将为您提供缺失的值complete()
),然后将其替换为NA
:>
0