【问题标题】:Create custom dplyr data transformation function in R在 R 中创建自定义 dplyr 数据转换函数
【发布时间】:2018-05-06 11:41:28
【问题描述】:

我需要对两个不同变量的不同组合重复操作多次(尝试为显示百分比的堆叠条形图创建数据。任何人都可以将下面的代码变成一个函数(数据集,以及两个变量 x 和 y ) 为了快速创建新的数据集?或者给我一些很好的参考或链接来学习函数和 dplyr。谢谢。

 dat = df %>% 
   select(x, y) %>% 
   group_by(x, y) %>% 
   summarise(n = n()) %>% 
   mutate(percentage = round(n/sum(n)*100, 1)) %>% 
   ungroup() %>% 
   group_by(x) %>% 
   mutate(pos = cumsum(percentage) - (0.5 * percentage)) %>% 
   ungroup()  
   return(dat)

【问题讨论】:

标签: r function dplyr


【解决方案1】:

如上述 cmets 中所建议,可在此处找到分步说明:dplyr.tidyverse.org/articles/programming.html 本指南将提供quo() 功能和!! 符号的说明。

对于您的示例,您可以像这样创建一个函数:

df1<- data.frame(x1 = c(rep(3,5), rep(7,2)), 
                y1 = c(rep(2,4), rep(5,3)))

my.summary <- function(df, x, y){
  df %>% 
    select(!!x, !!y) %>% 
    group_by(!!x, !!y) %>% 
    summarise(n = n()) %>%
    mutate(percentage = round(n/sum(n)*100, 1)) %>% 
    ungroup() %>% 
    group_by(!!x) %>% 
    mutate(pos = cumsum(percentage) - (0.5 * percentage)) %>% 
    ungroup() 
}

my.summary(df1, quo(x1), quo(y1))

# # A tibble: 3 x 5
#    x1    y1     n percentage   pos
# <dbl> <dbl> <int>      <dbl> <dbl>
#   1     3     2     4         80    40
#   2     3     5     1         20    90
#   3     7     5     2        100    50

【讨论】:

  • 谢谢,但是当我将变异部分添加到函数中时,它不再起作用,您能否将您的代码扩展为一个完整的示例?
  • 刚刚做了。查看答案
  • 太棒了!我也开始阅读 Markus 他的建议,我现在开始明白了。
  • 是的,该链接非常有用,我将其添加到答案中,以便所有人都能看到它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-09
相关资源
最近更新 更多