我已经写了我的第一个函数,但是没有用。我收到错误:错误:列var1
是未知的
运行该功能时。
编辑:下面的代码是更大的代码块的一部分,该代码也可以生成图形,但是该部分有效。
代码:
# Creating dummydata
a <- sample(letters[1:5], 500, rep = TRUE)
b <- sample(1:10, 500, rep = TRUE)
df1 <- data.frame(a, b)
create_barchart <- function(data, var1, var2) {
# Creating summary statistics
df <- data %>%
group_by(var1, var2) %>%
summarise(n=n()) %>%
group_by(var1) %>%
mutate(perc=100*n/sum(n))
}
create_barchart(df1, a, b)
答案 0 :(得分:2)
在var1
和var2
周围放置{{...}},然后删除df <-
。建议您使用ungroup
终止group_by
。
还要注意,可以使用count({{var1}}, {{var2}})
代替group_by({{var1}}, {{var2}}) %>% summarize(n = n()) %>% ungroup
。
library(dplyr)
create_barchart <- function(data, var1, var2) {
# Creating summary statistics
data %>%
group_by({{var1}}, {{var2}}) %>%
summarise(n=n()) %>%
ungroup %>%
group_by({{var1}}) %>%
mutate(perc=100*n/sum(n)) %>%
ungroup
}
create_barchart(df1, a, b)
答案 1 :(得分:0)
除了格洛腾迪克的答案外,您还可以使用enquo()
-!!
(发音为“ Bang Bang”)对
create_barchart <- function(data, var1, var2) {
var1 <- enquo(var1)
var2 <- enquo(var2)
# Creating summary statistics
df <- data %>%
group_by(!!var1, !!var2) %>%
summarise(n=n()) %>%
group_by(!!var1) %>%
mutate(perc=100*n/sum(n))
return(df)
}
create_barchart(data = df1, var1 = a, var2 = b)
有关更深入的说明,您还可以查看此blogpost。 希望这会有所帮助。