将自定义函数一次应用于分组的数据帧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)

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

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.csvandA_UK_19_2.csv

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

- 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用来创建子组

library(dplyr)
library(purrr)
library(slider)

N <- 10

Collage <- function(country,strain,subgroupnumber,data) {
  cat(paste('Processing:',country,'-',strain,'/',subgroupnumber),'\n')
  cat(paste(nrow(data) , ' files to read \n'))
  cat(paste(data$png_file,collapse=' ; '),'\n')
  cat('\n')
}

res <- df %>% group_by(country,strain) %>% 
  group_walk(~{
    group <- .y
    subgroups <- slider::slide(.x,.f=~.x,.step = N ,.after = N-1)
    # Remove empty elements
    subgroups <- subgroups[lengths(subgroups) != 0]
    
    # Run wished function on each subgroup
    subgroups %>% iwalk(~{
      Collage(group[1],group[2],.y,.x)
  })

})

Processing: UK - Covid_123 / 1 
10  files to read 
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 

Processing: UK - Covid_123 / 2 
9  files to read 
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 

Processing: UK - Covid_125 / 1 
10  files to read 
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 

Processing: UK - Covid_125 / 2 
5  files to read 
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 

Processing: UK - Covid_127 / 1 
10  files to read 
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 

Processing: UK - Covid_127 / 2 
7  files to read 
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 

Processing: UK - Covid_128 / 1 
1  files to read 
A_UK_2.4_lp21_yun7__1.png 
              1

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将自定义函数应用于R中数据帧中每一行的两列

来自分类Dev

R将自定义矢量化函数应用于数据帧中的行,特定列

来自分类Dev

将自定义函数应用于数据框

来自分类Dev

将自定义函数应用于r中的每一行

来自分类Dev

如何将自定义比较器应用于R数据帧?

来自分类Dev

将自定义函数应用于数据框的每个子集并生成一个数据框

来自分类Dev

将自定义函数应用于数据框的每个子集并生成一个数据框

来自分类Dev

将自定义函数应用于具有通用名称的任何数据集

来自分类Dev

将自定义累积函数应用于熊猫数据框

来自分类Dev

如何将自定义函数应用于熊猫数据框的2列?

来自分类Dev

将自定义主题应用于Odoo应用

来自分类Dev

将自定义函数应用于多个文件并在R中创建唯一的csv输出

来自分类Dev

AngularJS:将自定义过滤器应用于数据时,我得到一个空输出

来自分类Dev

将自定义样式应用于微调器

来自分类Dev

无法将自定义listSelector应用于ListView

来自分类Dev

将自定义功能应用于熊猫df

来自分类Dev

将自定义累积功能应用于熊猫

来自分类Dev

将自定义累积功能应用于熊猫

来自分类Dev

如何在PyMC中将自定义函数应用于变量?

来自分类Dev

将自定义函数应用于pandas Series会产生AttributeError

来自分类Dev

将自定义numba njit函数应用于熊猫滚动对象

来自分类Dev

将自定义聚合函数应用于pandas DataFrame

来自分类Dev

如何在PyMC中将自定义函数应用于变量?

来自分类Dev

在模式中使用'current()'函数将自定义模板应用于节点

来自分类Dev

如何将自定义函数应用于 quanteda 语料库

来自分类Dev

如何将自定义重试策略应用于 Azure 函数中的 Eventhub 绑定

来自分类Dev

将自定义函数应用于多个 data.table 列

来自分类Dev

将自定义函数应用于 Data.Table

来自分类Dev

如何将用户自定义函数列明智地应用于熊猫中的分组数据

Related 相关文章

  1. 1

    将自定义函数应用于R中数据帧中每一行的两列

  2. 2

    R将自定义矢量化函数应用于数据帧中的行,特定列

  3. 3

    将自定义函数应用于数据框

  4. 4

    将自定义函数应用于r中的每一行

  5. 5

    如何将自定义比较器应用于R数据帧?

  6. 6

    将自定义函数应用于数据框的每个子集并生成一个数据框

  7. 7

    将自定义函数应用于数据框的每个子集并生成一个数据框

  8. 8

    将自定义函数应用于具有通用名称的任何数据集

  9. 9

    将自定义累积函数应用于熊猫数据框

  10. 10

    如何将自定义函数应用于熊猫数据框的2列?

  11. 11

    将自定义主题应用于Odoo应用

  12. 12

    将自定义函数应用于多个文件并在R中创建唯一的csv输出

  13. 13

    AngularJS:将自定义过滤器应用于数据时,我得到一个空输出

  14. 14

    将自定义样式应用于微调器

  15. 15

    无法将自定义listSelector应用于ListView

  16. 16

    将自定义功能应用于熊猫df

  17. 17

    将自定义累积功能应用于熊猫

  18. 18

    将自定义累积功能应用于熊猫

  19. 19

    如何在PyMC中将自定义函数应用于变量?

  20. 20

    将自定义函数应用于pandas Series会产生AttributeError

  21. 21

    将自定义numba njit函数应用于熊猫滚动对象

  22. 22

    将自定义聚合函数应用于pandas DataFrame

  23. 23

    如何在PyMC中将自定义函数应用于变量?

  24. 24

    在模式中使用'current()'函数将自定义模板应用于节点

  25. 25

    如何将自定义函数应用于 quanteda 语料库

  26. 26

    如何将自定义重试策略应用于 Azure 函数中的 Eventhub 绑定

  27. 27

    将自定义函数应用于多个 data.table 列

  28. 28

    将自定义函数应用于 Data.Table

  29. 29

    如何将用户自定义函数列明智地应用于熊猫中的分组数据

热门标签

归档