Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中的自定义函数中对分组数据使用dplyr中的mutate,并使用dataframe和列作为参数_R_Dataframe_Dplyr_Group By - Fatal编程技术网

在R中的自定义函数中对分组数据使用dplyr中的mutate,并使用dataframe和列作为参数

在R中的自定义函数中对分组数据使用dplyr中的mutate,并使用dataframe和列作为参数,r,dataframe,dplyr,group-by,R,Dataframe,Dplyr,Group By,我在R中创建了一个自定义函数,用于为绘图准备数据。我将一个数据帧和两列(来自该数据帧)传递给我的函数,然后使用dplyr。函数需要按分类变量(在本例中为age.group)分组,并且在数据仍然分组的情况下,创建连续变量(to.be.bined)的装箱版本并获取该组的计数。我尝试使用mutate来完成这两个任务 这个函数中的代码在函数外部工作,但我同时将数据帧和变量传递给函数(使用花括号,因为它是dplyr) 我得到以下错误: 错误:无法修改列`“age.group``因为它是一个分组变量 我认为

我在R中创建了一个自定义函数,用于为绘图准备数据。我将一个数据帧和两列(来自该数据帧)传递给我的函数,然后使用dplyr。函数需要按分类变量(在本例中为age.group)分组,并且在数据仍然分组的情况下,创建连续变量(to.be.bined)的装箱版本并获取该组的计数。我尝试使用mutate来完成这两个任务

这个函数中的代码在函数外部工作,但我同时将数据帧和变量传递给函数(使用花括号,因为它是dplyr)

我得到以下错误:

错误:无法修改列`“age.group``因为它是一个分组变量

我认为我的代码不会修改这个变量。为了得到每组的百分比,我需要按组进行计数,所以我不能先取消分组(这是对其他人得到相同错误的建议)

如有任何建议,将不胜感激

雷普雷克斯:

library(tidyverse)

simple.df <- data.frame(
  age.group = c("18-30","Under 18","Over 30",
                "Over 30","Over 30","Under 18","18-30","18-30",
                "Over 30","Under 18","18-30","18-30","18-30","18-30",
                "Under 18","18-30","Under 18","18-30","Under 18",
                "Under 18","Under 18","Over 30","Over 30","Over 30",
                "Over 30","Over 30","18-30","Under 18","Over 30",
                "Under 18"),
  to.be.binned = c(98.415794,32.35116,73.29943,
                   81.92012,99.61144,29.665798,97.652885,94.94358,
                   77.798035,24.110243,99.110245,98.415794,99.80469,94.24913,
                   79.665794,98.415794,72.02691,96.332466,94.94358,
                   97.02691,97.02691,92.860245,98.415794,97.02691,
                   90.082466,99.110245,99.80469,98.415794,99.55236,99.110245)
)



bin_by_group <- function(df, my.grouping, bin.this) {
  
  bw = 25
  
  new.df <- df %>%
    group_by({{my.grouping}}) %>%
    mutate(this.binned = cut(as.numeric({{bin.this}}),
                             breaks = seq(0, 100, bw),
                             labels = seq(0 + bw, 100, bw)-(bw/2)),
           n = n()) %>%
    group_by({{my.grouping}}, this.binned) %>%
    summarise(p = n()/n[1]) %>%
    ungroup() %>%
    mutate(this.binned = as.numeric(as.character(this.binned)))
  
  return(new.df)
  
}


test.df <- bin_by_group(simple.df, "age.group", "to.be.binned")
#> Warning in cut(as.numeric(~"to.be.binned"), breaks = seq(0, 100, bw), labels =
#> seq(0 + : NAs introduced by coercion
#> Error: Column `"age.group"` can't be modified because it's a grouping variable
库(tidyverse)
简单。df%
group_by({my.grouping},this.bined)%>%
总结(p=n()/n[1])%>%
解组()%>%
mutate(this.binned=as.numeric(as.character(this.binned)))
返回(new.df)
}
test.df切割警告(如数字(~“to.be.bined”),中断=序号(0,100,bw),标签=
#>seq(0+:强制引入的NAs
#>错误:“age.group”列是分组变量,无法修改

只是我们需要传递不带引号的参数,因为
{}
希望它不带引号,因为
{}
相当于
enquo
+
!!

bin_by_group(simple.df, age.group, to.be.binned)
-输出

# A tibble: 7 x 3
#  age.group this.binned     p
#  <chr>           <dbl> <dbl>
#1 18-30            87.5   1  
#2 Over 30          62.5   0.1
#3 Over 30          87.5   0.9
#4 Under 18         12.5   0.1
#5 Under 18         37.5   0.2
#6 Under 18         62.5   0.1
#7 Under 18         87.5   0.6
-测试

 bin_by_group(simple.df, "age.group", "to.be.binned")
# A tibble: 7 x 3
  age.group this.binned     p
  <chr>           <dbl> <dbl>
1 18-30            87.5   1  
2 Over 30          62.5   0.1
3 Over 30          87.5   0.9
4 Under 18         12.5   0.1
5 Under 18         37.5   0.2
6 Under 18         62.5   0.1
7 Under 18         87.5   0.6

bin_by_group(simple.df, age.group, to.be.binned)
# A tibble: 7 x 3
  age.group this.binned     p
  <chr>           <dbl> <dbl>
1 18-30            87.5   1  
2 Over 30          62.5   0.1
3 Over 30          87.5   0.9
4 Under 18         12.5   0.1
5 Under 18         37.5   0.2
6 Under 18         62.5   0.1
7 Under 18         87.5   0.6
bin\u by\u group(simple.df,“age.group”,“to.be.bined”)
#一个tibble:7x3
年龄组这一组
1 18-30            87.5   1  
2比30 62.50.1
3超过3087.50.9
4 18岁以下12.5 0.1
5岁以下18.37.50.2
6低于18 62.5 0.1
7岁以下18 87.5 0.6
按组分类(simple.df、age.group、to.be.bined)
#一个tibble:7x3
年龄组这一组
1 18-30            87.5   1  
2比30 62.50.1
3超过3087.50.9
4 18岁以下12.5 0.1
5岁以下18.37.50.2
6低于18 62.5 0.1
7岁以下18 87.5 0.6

非常感谢!!!
 bin_by_group(simple.df, "age.group", "to.be.binned")
# A tibble: 7 x 3
  age.group this.binned     p
  <chr>           <dbl> <dbl>
1 18-30            87.5   1  
2 Over 30          62.5   0.1
3 Over 30          87.5   0.9
4 Under 18         12.5   0.1
5 Under 18         37.5   0.2
6 Under 18         62.5   0.1
7 Under 18         87.5   0.6

bin_by_group(simple.df, age.group, to.be.binned)
# A tibble: 7 x 3
  age.group this.binned     p
  <chr>           <dbl> <dbl>
1 18-30            87.5   1  
2 Over 30          62.5   0.1
3 Over 30          87.5   0.9
4 Under 18         12.5   0.1
5 Under 18         37.5   0.2
6 Under 18         62.5   0.1
7 Under 18         87.5   0.6