R 错误:应用函数时,`x`列未知

R 错误:应用函数时,`x`列未知,r,function,error-messaging,R,Function,Error Messaging,我试图编写一个如下所示的函数: Q5base_func<- function(x){ a<-subQ5 %>% group_by(Q1,x) %>% summarise(n = n()) a <- a[complete.cases(a),] %>% filter(x == 1) sum <- sum(a$n) a_percent<- a%>% mutate(freq= (n/sum)*100) } 错误回溯: Er

我试图编写一个如下所示的函数:

Q5base_func<- function(x){
  a<-subQ5 %>% group_by(Q1,x) %>% summarise(n = n())
  a <- a[complete.cases(a),] %>% filter(x == 1)
  sum <- sum(a$n)
  a_percent<- a%>%
    mutate(freq= (n/sum)*100)
}
错误回溯:

 Error: Column `x` is unknown 
13.
stop(structure(list(message = "Column `x` is unknown", call = NULL, 
    cppstack = NULL), class = c("Rcpp::exception", "C++Error", 
"error", "condition"))) 
12.
grouped_df_impl(data, unname(vars), drop) 
11.
grouped_df(groups$data, groups$group_names, .drop) 
10.
group_by.data.frame(., Q1, x) 
9.
group_by(., Q1, x) 
8.
function_list[[i]](value) 
7.
freduce(value, `_function_list`) 
6.
`_fseq`(`_lhs`) 
5.
eval(quote(`_fseq`(`_lhs`)), env, env) 
4.
eval(quote(`_fseq`(`_lhs`)), env, env) 
3.
withVisible(eval(quote(`_fseq`(`_lhs`)), env, env)) 
2.
subQ5 %>% group_by(Q1, x) %>% summarise(n = n()) 
1.
Q5base_func(subQ5$Q11) 
示例数据集如下所示:

Q1  Qx
1   1
2   0
2   1
3   0
3   1
3   1

你所要完成的是可能的

subQ5 <- structure(list(Q1 = c(1L, 2L, 2L, 3L, 3L, 3L), 
                    Qx = c(1L, 0L, 1L, 0L, 1L, 1L)), 
               class = "data.frame", row.names = c(NA, -6L))

library(dplyr)

Q5base_func <- function(df, x) {
   df %>% filter(complete.cases(.))  %>% 
   group_by(Q1) %>% 
 #  mutate(sumx=sum(Qx==x), percent=sum(Qx==x)/n())     #add columns and keeps all of the data
    summarise(sumx=sum(Qx==x), percent=sum(Qx==x)/n())  #summarize the results
}

x<-1
answer <-Q5base_func(subQ5, x)
answer
subQ5%
分组依据(第一季度)%>%
#mutate(sumx=sum(Qx==x),percent=sum(Qx==x)/n())#添加列并保留所有数据
总结(sumx=sum(Qx==x),percent=sum(Qx==x)/n())#总结结果
}

你所要完成的事情是可能的

subQ5 <- structure(list(Q1 = c(1L, 2L, 2L, 3L, 3L, 3L), 
                    Qx = c(1L, 0L, 1L, 0L, 1L, 1L)), 
               class = "data.frame", row.names = c(NA, -6L))

library(dplyr)

Q5base_func <- function(df, x) {
   df %>% filter(complete.cases(.))  %>% 
   group_by(Q1) %>% 
 #  mutate(sumx=sum(Qx==x), percent=sum(Qx==x)/n())     #add columns and keeps all of the data
    summarise(sumx=sum(Qx==x), percent=sum(Qx==x)/n())  #summarize the results
}

x<-1
answer <-Q5base_func(subQ5, x)
answer
subQ5%
分组依据(第一季度)%>%
#mutate(sumx=sum(Qx==x),percent=sum(Qx==x)/n())#添加列并保留所有数据
总结(sumx=sum(Qx==x),percent=sum(Qx==x)/n())#总结结果
}

xa您是否正确调用了该函数?例如
Q5base_func(1)
,在没有看到您的数据样本的情况下,我相信您应该
过滤(Q==x)
,而不是分组,但这只是一个猜测,没有对您的问题进行进一步澄清。谢谢!我已经更新了样本数据集。你能在此基础上提出一些建议吗?如果不够,我将添加更多。@Dave2是否正确调用该函数?例如
Q5base_func(1)
,在没有看到您的数据样本的情况下,我相信您应该
过滤(Q==x)
,而不是分组,但这只是一个猜测,没有对您的问题进行进一步澄清。谢谢!我已经更新了样本数据集。你能在此基础上提出一些建议吗?如果不够的话,我会补充更多。@Dave2eThis效果很好!我真的很感激你的建议。问题是我有十多条相同的线路要运行。所以我想把它变成一个函数。是的,把它包含在一个函数中可能很容易,但是什么仅仅改变了x值或数据帧(假设数据帧结构保持不变)或两者呢?
a%group\u by(Q1,x)%%>%summary(n=n())
将添加一个新的行,它是n个计数,并且这个
a\u%变化(freq=(n/sum)*100)
行将添加另一列“百分比”。所以我认为这是数据帧的改变,非常感谢!我还使用了dplyr。你的代码帮助我简化了我的代码。这很有效!我真的很感激你的建议。问题是我有十多条相同的线路要运行。所以我想把它变成一个函数。是的,把它包含在一个函数中可能很容易,但是什么仅仅改变了x值或数据帧(假设数据帧结构保持不变)或两者呢?
a%group\u by(Q1,x)%%>%summary(n=n())
将添加一个新的行,它是n个计数,并且这个
a\u%变化(freq=(n/sum)*100)
行将添加另一列“百分比”。所以我认为这是数据帧的改变,非常感谢!我还使用了dplyr。你的代码帮助我简化了我的代码。