我想将GROUP_BY()函数与我的定制函数一起使用,但是GROUP_BY中的列名将在我的函数参数中定义.

请看我的数据的假设示例:

data <- data.frame(ind = rep(c("A", "B", "C"), 4),
                   gender = rep(c("F", "M"), each = 6), 
                   value = sample(1:100, 12))

这就是我想要的结果:

result <- data %>%
   group_by(ind, gender) %>%
   mutate(value = mean(value)) %>%
   distinct()

这就是我试图让我的功能发挥作用的方式:

myFunction <- function(data, set_group, variable){
   result <- data %>%
      group_by(get(set_group)) %>%
      mutate(across(all_of(variable), ~ mean(.x, na.rm = TRUE))) %>%
      distinct()
}

result3 <- myFunction(data, set_group = c("ind", "gender"), variable = c("value"))
result3

我希望允许用户根据需要定义尽可能多的set_group和变量.我try 在GROUP_BY中使用get()函数、all_of()函数和mget()函数,但都不起作用. 有人知道我该怎么编码吗?

谢谢!

推荐答案

我们可以在group_by内使用across

myFunction <- function(data, set_group, variable){
    data %>%
      group_by(across(all_of(set_group))) %>%
      mutate(across(all_of(variable), ~ mean(.x, na.rm = TRUE))) %>%
      ungroup %>%
      distinct() 
}

-测试

> myFunction(data, set_group = c("ind", "gender"), variable = c("value"))
# A tibble: 6 × 3
  ind   gender value
  <chr> <chr>  <dbl>
1 A     F       43.5
2 B     F       87.5
3 C     F       67.5
4 A     M       13  
5 B     M       43.5
6 C     M       37.5

另一种 Select 是换算成sym英镑,然后求值(!!!)

myFunction <- function(data, set_group, variable){
    data %>%
      group_by(!!! rlang::syms(set_group)) %>%
      mutate(across(all_of(variable), ~ mean(.x, na.rm = TRUE))) %>%
      ungroup %>%
      distinct() 
}

-测试

> myFunction(data, set_group = c("ind", "gender"), variable = c("value"))
# A tibble: 6 × 3
  ind   gender value
  <chr> <chr>  <dbl>
1 A     F       43.5
2 B     F       87.5
3 C     F       67.5
4 A     M       13  
5 B     M       43.5
6 C     M       37.5

注:当只有一个对象时使用get,因为可以使用多个对象mget.但是,最好是使用tidyverse个函数

R相关问答推荐

如何使用TukeyHSD绘制事后概率热图

基于2行删除重复项指定每列要执行的操作

使用rlang s arg_match判断函数输入列表

如果索引重复,聚合xts核心数据

带有gplot 2的十字舱口

如何使用`ggplot2::geom_segment()`或`ggspatial::geom_spatial_segment()`来处理不在格林威治中心的sf对象?

如何在Chart_Series()中更改轴值的 colored颜色 ?

如何使用STAT_SUMMARY向ggplot2中的密度图添加垂直线

未识别时区

IMF IFS数据以R表示

如何提取所有完美匹配的10个核苷酸在一个成对的匹配与生物字符串在R?>

从R中的对数正态分布生成随机数的正确方法

从非重叠(非滚动)周期中的最新数据向后开窗并在周期内计数

R如何计算现有行的总和以添加新的数据行

使用shiny 中的所选要素行下拉菜单

如何在反曲线图中更改X标签

为什么在写入CSV文件时Purrr::Pwalk不起作用

将数据从一列转换为按组累计计数的单个虚拟变量

如何使投篮在R中保持一致

使用同一行中的前一个值填充R矩阵中的缺失值