将自定义函数一次应用于分组的数据帧n行 [英] apply a custom function on grouped dataframe n rows at a time

查看:40
本文介绍了将自定义函数一次应用于分组的数据帧n行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

用户定义的功能

  CollageImage <- function(path, country, strain, assay,subgroup) {
  img_out <- magick::image_read(path) %>%
    magick::image_trim() %>%
    magick::image_convert(format = "jpeg") %>%
    magick::image_montage(
      tile = tile,
      geometry = paste(500, "x", 500, "+5+5", sep = "")
    ) %>%
    magick::image_border(geometry = "10x80", color = "#FFFFFF") %>%
    magick::image_annotate(
      paste(country, "\n", strain,
            sep = " "
      ),
      weight = 700,
      size = 30,
      location = "+0+0",
      gravity = "north"
    ) %>%
    magick::image_convert("jpg")
  
  #' write the image to file
  img_out %>%
    magick::image_write(
      format = "jpeg",
      path = here::here(paste(country, strain, assay,subgroup, "collage.jpg", sep = "_")),
      quality = 100,
      density = 300
    )
  #' check the collage info
  magick::image_info(img_out)
}
    

分组数据框

out_df <- df %>% dplyr::group_by(country ,strain)

组映射以将功能应用于分组的数据框

group map to apply function on the grouped dataframe

out_df %>% 
  dplyr::group_map( ~ CollageEachGroup(
  path = .x$path,
  country = .y$country,
  assay = .x$assay,
  strain = .y$strain,
  subgroup
))
  

我想通过在每个组中一次移动10行的窗口来应用该功能.感谢有关如何执行此操作的任何输入.例如,如果一个组中有19张图像,我想写2个文件.1将是10个文件的拼贴,而其他将是9个文件的拼贴.并且,文件名必须为 A_UK_19_1.csv A_UK_19_2.csv

I would like to apply the function by a moving window of 10 rows at a time within each group. Appreciate any inputs on how to do this. For example, if there are 19 images in a group I would like write 2 files. 1 would be a collage of 10 files and other would be collage of 9 files. And, the files names have to be A_UK_19_1.csv and A_UK_19_2.csv

这是我正在解决的一种方法(来自So答案),但这不是一种优雅的方法.

This is one way I was thinking to solve it (from So answers), but this is not an elegant way.

- Filter each group put
- create a block for each group as follows

    df_subset$bloc <-
      rep(seq(1, 1 + nrow(df_subset) %/% bloc_len), each = bloc_len, length.out = nrow(df_subset))


dput(df)
structure(list(png_file = c("A_UK_1_lp21_pmn1__1.png", "A_UK_1_xno9_pmn1__1.png", 
"A_UK_2.14.3_lp21_pmn1__1.png", "A_UK_2.14.3_xno9_pmn1__1.png", 
"A_UK_2.2_lp21_zn78__1.png", "A_UK_2.2_xno9_zn78__1.png", "A_UK_2.3_lp21_pmn1__1.png", 
"A_UK_2.3_xno9_pmn1__1.png", "A_UK_2.4_lp21_yun7__1.png", "A_UK_2.8.1_lp21_pmn1__1.png", 
"A_UK_2.8.1_xno9_pmn1__1.png", "A_UK_2.8.2_lp21_pmn1__1.png", 
"A_UK_2.8.2_xno9_pmn1__1.png", "B_UK_2.1_lp21_pmn1__1.png", "B_UK_2.1_xno9_pmn1__1.png", 
"B_UK_2.14.1_lp21_pmn1__1.png", "B_UK_2.14.1_xno9_pmn1__1.png", 
"B_UK_2.14.2_lp21_pmn1__1.png", "B_UK_2.14.2_xno9_pmn1__1.png", 
"A_UK_2.14.3_lp21_pmn1__1.png", "A_UK_2.14.3_xno9_pmn1__1.png", 
"A_UK_2.2_lp21_zn78__1.png", "A_UK_2.2_xno9_zn78__1.png", "A_UK_2.3_lp21_pmn1__1.png", 
"A_UK_2.3_xno9_pmn1__1.png", "A_UK_2.4_lp21_yun7__1.png", "A_UK_2.8.1_lp21_pmn1__1.png", 
"A_UK_2.8.1_xno9_pmn1__1.png", "A_UK_2.8.2_lp21_pmn1__1.png", 
"A_UK_2.8.2_xno9_pmn1__1.png", "B_UK_2.14.1_lp21_pmn1__1.png", 
"B_UK_2.14.1_xno9_pmn1__1.png", "B_UK_2.14.2_lp21_pmn1__1.png", 
"B_UK_2.14.2_xno9_pmn1__1.png", "A_UK_2.2_lp21_zn78__1.png", 
"A_UK_2.2_xno9_zn78__1.png", "A_UK_2.3_lp21_pmn1__1.png", "A_UK_2.3_xno9_pmn1__1.png", 
"A_UK_2.4_lp21_yun7__1.png", "A_UK_2.9.1_lp21_yun7__1.png", "B_UK_2.12.1_lp21_yun7__1.png", 
"B_UK_2.12.2_lp21_yun7__1.png", "B_UK_2.7.1_lp21_pmn1__1.png", 
"B_UK_2.7.1_xno9_pmn1__1.png", "B_UK_2.7.4_lp21_yun7__1.png", 
"B_UK_2.9.2_lp21_yun7__1.png", "A_UK_2.4_lp21_yun7__1.png", "A_UK_2.5.4_lp21_pmn1__1.png", 
"A_UK_2.5.4_xno9_pmn1__1.png", "A_UK_2.6.4_lp21_yun7__1.png", 
"B_UK_2.5.3_lp21_yun7__1.png", "A_UK_2.4_lp21_yun7__1.png"), 
    path = c("C:/path/A_UK_1_lp21_pmn1__1.png", "C:/path/A_UK_1_xno9_pmn1__1.png", 
    "C:/path/A_UK_2.14.3_lp21_pmn1__1.png", "C:/path/A_UK_2.14.3_xno9_pmn1__1.png", 
    "C:/path/A_UK_2.2_lp21_zn78__1.png", "C:/path/A_UK_2.2_xno9_zn78__1.png", 
    "C:/path/A_UK_2.3_lp21_pmn1__1.png", "C:/path/A_UK_2.3_xno9_pmn1__1.png", 
    "C:/path/A_UK_2.4_lp21_yun7__1.png", "C:/path/A_UK_2.8.1_lp21_pmn1__1.png", 
    "C:/path/A_UK_2.8.1_xno9_pmn1__1.png", "C:/path/A_UK_2.8.2_lp21_pmn1__1.png", 
    "C:/path/A_UK_2.8.2_xno9_pmn1__1.png", "C:/path/B_UK_2.1_lp21_pmn1__1.png", 
    "C:/path/B_UK_2.1_xno9_pmn1__1.png", "C:/path/B_UK_2.14.1_lp21_pmn1__1.png", 
    "C:/path/B_UK_2.14.1_xno9_pmn1__1.png", "C:/path/B_UK_2.14.2_lp21_pmn1__1.png", 
    "C:/path/B_UK_2.14.2_xno9_pmn1__1.png", "C:/path/A_UK_2.14.3_lp21_pmn1__1.png", 
    "C:/path/A_UK_2.14.3_xno9_pmn1__1.png", "C:/path/A_UK_2.2_lp21_zn78__1.png", 
    "C:/path/A_UK_2.2_xno9_zn78__1.png", "C:/path/A_UK_2.3_lp21_pmn1__1.png", 
    "C:/path/A_UK_2.3_xno9_pmn1__1.png", "C:/path/A_UK_2.4_lp21_yun7__1.png", 
    "C:/path/A_UK_2.8.1_lp21_pmn1__1.png", "C:/path/A_UK_2.8.1_xno9_pmn1__1.png", 
    "C:/path/A_UK_2.8.2_lp21_pmn1__1.png", "C:/path/A_UK_2.8.2_xno9_pmn1__1.png", 
    "C:/path/B_UK_2.14.1_lp21_pmn1__1.png", "C:/path/B_UK_2.14.1_xno9_pmn1__1.png", 
    "C:/path/B_UK_2.14.2_lp21_pmn1__1.png", "C:/path/B_UK_2.14.2_xno9_pmn1__1.png", 
    "C:/path/A_UK_2.2_lp21_zn78__1.png", "C:/path/A_UK_2.2_xno9_zn78__1.png", 
    "C:/path/A_UK_2.3_lp21_pmn1__1.png", "C:/path/A_UK_2.3_xno9_pmn1__1.png", 
    "C:/path/A_UK_2.4_lp21_yun7__1.png", "C:/path/A_UK_2.9.1_lp21_yun7__1.png", 
    "C:/path/B_UK_2.12.1_lp21_yun7__1.png", "C:/path/B_UK_2.12.2_lp21_yun7__1.png", 
    "C:/path/B_UK_2.7.1_lp21_pmn1__1.png", "C:/path/B_UK_2.7.1_xno9_pmn1__1.png", 
    "C:/path/B_UK_2.7.4_lp21_yun7__1.png", "C:/path/B_UK_2.9.2_lp21_yun7__1.png", 
    "C:/path/A_UK_2.4_lp21_yun7__1.png", "C:/path/A_UK_2.5.4_lp21_pmn1__1.png", 
    "C:/path/A_UK_2.5.4_xno9_pmn1__1.png", "C:/path/A_UK_2.6.4_lp21_yun7__1.png", 
    "C:/path/B_UK_2.5.3_lp21_yun7__1.png", "C:/path/A_UK_2.4_lp21_yun7__1.png"
    ), assay = c("A", "A", "A", "A", "A", "A", "A", "A", "A", 
    "A", "A", "A", "A", "B", "B", "B", "B", "B", "B", "A", "A", 
    "A", "A", "A", "A", "A", "A", "A", "A", "A", "B", "B", "B", 
    "B", "A", "A", "A", "A", "A", "A", "B", "B", "B", "B", "B", 
    "B", "A", "A", "A", "A", "B", "A"), country = c("UK", "UK", 
    "UK", "UK", "UK", "UK", "UK", "UK", "UK", "UK", "UK", "UK", 
    "UK", "UK", "UK", "UK", "UK", "UK", "UK", "UK", "UK", "UK", 
    "UK", "UK", "UK", "UK", "UK", "UK", "UK", "UK", "UK", "UK", 
    "UK", "UK", "UK", "UK", "UK", "UK", "UK", "UK", "UK", "UK", 
    "UK", "UK", "UK", "UK", "UK", "UK", "UK", "UK", "UK", "UK"
    ), strain = c("Covid_123", "Covid_123", "Covid_123", "Covid_123", 
    "Covid_123", "Covid_123", "Covid_123", "Covid_123", "Covid_123", 
    "Covid_123", "Covid_123", "Covid_123", "Covid_123", "Covid_123", 
    "Covid_123", "Covid_123", "Covid_123", "Covid_123", "Covid_123", 
    "Covid_125", "Covid_125", "Covid_125", "Covid_125", "Covid_125", 
    "Covid_125", "Covid_125", "Covid_125", "Covid_125", "Covid_125", 
    "Covid_125", "Covid_125", "Covid_125", "Covid_125", "Covid_125", 
    "Covid_127", "Covid_127", "Covid_127", "Covid_127", "Covid_127", 
    "Covid_127", "Covid_127", "Covid_127", "Covid_127", "Covid_127", 
    "Covid_127", "Covid_127", "Covid_127", "Covid_127", "Covid_127", 
    "Covid_127", "Covid_127", "Covid_128")), spec = structure(list(
    cols = list(png_file = structure(list(), class = c("collector_character", 
    "collector")), path = structure(list(), class = c("collector_character", 
    "collector")), assay = structure(list(), class = c("collector_character", 
    "collector")), country = structure(list(), class = c("collector_character", 
    "collector")), strain = structure(list(), class = c("collector_character", 
    "collector"))), default = structure(list(), class = c("collector_guess", 
    "collector")), delim = ","), class = "col_spec"), row.names = c(NA, 
-52L), class = c("tbl_df", "tbl", "data.frame"))
 
 

推荐答案

您可以使用 slider :: slide 查看全文

登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆