使用R创建函数以获取双向表

使用R创建函数以获取双向表,r,function,dplyr,R,Function,Dplyr,我有以下资料: require(dplyr) x1=rbinom(1000,1,prob = 0.6) x2=rbinom(1000,2,prob = c(0.3,0.4,0.3)) data=data.frame(x1,x2) 然后我需要交叉制表,其中x2=2 我使用了dplyr函数来获得所需的结果,如下所示: data %>% filter(x2==2) %>% count(x1,x2) x1 x2 n 1 0 2 38 2 1 2 71 fun1=functi

我有以下资料:

require(dplyr)
x1=rbinom(1000,1,prob = 0.6)
x2=rbinom(1000,2,prob = c(0.3,0.4,0.3))
data=data.frame(x1,x2)
然后我需要交叉制表,其中x2=2

我使用了
dplyr
函数来获得所需的结果,如下所示:

data %>% filter(x2==2) %>% count(x1,x2)
  x1 x2  n
1  0  2 38
2  1  2 71
fun1=function(data,text1,text2)
{
  return(data %>% filter({{text2}}==2) %>% count({{text1}},{{text2}}))
}
fun1(data,"x1","x2")
这是我对数据执行的单个操作之一。我还需要多次这样做。因此,我尝试创建一个函数,以获得如下相同的结果:

data %>% filter(x2==2) %>% count(x1,x2)
  x1 x2  n
1  0  2 38
2  1  2 71
fun1=function(data,text1,text2)
{
  return(data %>% filter({{text2}}==2) %>% count({{text1}},{{text2}}))
}
fun1(data,"x1","x2")
但是我没有得到想要的结果。有人能帮我找出我做错了什么吗


谢谢

您已经编写了使用非标准评估(NSE)的函数,因此在调用函数时也要使用它。也就是说,不要将参数作为带引号的字符传递。改为这样做:

fun1(data, x1, x2)

#   x1 x2  n
# 1  0  2 41
# 2  1  2 74

那么期望的结果是什么?@Manu与我在没有函数的情况下得到的结果一样,
{{}}
的目的是使用不带引号的列名
fun1(数据,x1,x2)
应该可以工作。@gregorma:是的。我怎么没注意到:(