在函数中使用dplyr时出现问题(分组依据)

在函数中使用dplyr时出现问题(分组依据),r,function,plyr,dplyr,R,Function,Plyr,Dplyr,我想使用dplyr进行一些数据操作。背景:我有一个调查权重和一系列变量(主要是likert项目)。我想对每个类别的频率和百分比加上和不加调查权重 作为一个例子,让我们使用频率作为性别变量。结果应该是: gender freq freq.weighted 1 292 922.2906 2 279 964.7551 9 6 21.7338 我将对许多变量执行此操作。因此,我决定将dplyr代码放在函数

我想使用dplyr进行一些数据操作。背景:我有一个调查权重和一系列变量(主要是likert项目)。我想对每个类别的频率和百分比加上和不加调查权重

作为一个例子,让我们使用频率作为性别变量。结果应该是:

 gender freq    freq.weighted
    1       292     922.2906
    2       279     964.7551
    9         6      21.7338
我将对许多变量执行此操作。因此,我决定将dplyr代码放在函数中,因此我只需更改变量并减少类型

#exampledata
gender<-c("2","2","1","2","2","2","2","2","2","2","2","2","1","1","2","2","2","2","2","2","1","2","2","2","2","2","2","2","2","2")
survey_weight<-c("2.368456","2.642901","2.926698","3.628653","3.247463","3.698195","2.776772","2.972387","2.686365","2.441820","3.494899","3.133106","3.253514","3.138839","3.430597","3.769577","3.367952","2.265350","2.686365","3.189538","3.029999","3.024567","2.972387","2.730978","4.074495","2.921552","3.769577","2.730978","3.247463","3.230097")
test_dataframe<-data.frame(gender,survey_weight)

#function
weighting.function<-function(dataframe,variable){
  test_weighted<- dataframe %>% 
    group_by_(variable) %>% 
    summarise_(interp(freq=count(~weight)),
               interp(freq_weighted=sum(~weight)))
  return(test_weighted)
}

result_dataframe<-weighting.function(test_dataframe,"gender")

#this second step was left out in this example:
#mutate_(perc=interp(~freq/sum(~freq)*100),perc_weighted=interp(~freq_weighted/sum(~freq_weighted)*100))
我试过很多不同的东西。首先,我使用
freq=n()


有什么想法吗?我读了关于标准评估的小插曲。但是,我总是遇到问题,不知道什么是解决方案。

我认为你有一些嵌套的错误,这导致了你的问题。最大的一个是使用
count()
而不是
summary()
。我猜你想要
n()

weighting.function%
分组依据(变量)%>%
总结_(
freq=~n(),
频率加权=~总和(调查加权)
)
}
加权函数(测试数据帧,~性别)
您还使用了一些不必要的
interp()
。如果确实使用了
interp()
,则调用应类似于
freq=interp(~n())
,即名称不在对interp的调用范围内,而要插入的内容以
~
开头

Error in UseMethod("group_by_") : 
  no applicable method for 'group_by_' applied to an object of class "formula" 
weighting.function <- function(dataframe, variable){
  dataframe %>% 
    group_by_(variable) %>% 
    summarise_(
      freq = ~n(),
      freq_weighted = ~sum(survey_weight)
    )
}

weighting.function(test_dataframe, ~gender)