簡體   English   中英

應用 function 的 tidyverse 方法是什么,該 function 旨在將 data.frames 作為 R 中分組 tibble 的輸入?

[英]What is the tidyverse way to apply a function designed to take data.frames as input across a grouped tibble in R?

我寫了一個 function ,它需要多列作為輸入,我想將其應用於分組的小標題,我認為帶有purrr::map的東西可能是正確的方法,但我不明白什么是合適的輸入用於各種map功能。 這是一個虛擬示例:

 myFun <- function(DF){
  DF %>% mutate(MyOut = (A * B)) %>% pull(MyOut) %>% sum()
}

MyDF <- data.frame(A = 1:5, B = 6:10)
myFun(MyDF)

這工作正常。 但是如果我想添加一些分組呢?

MyDF <- data.frame(A = 1:100, B = 1:100, Fruit = rep(c("Apple", "Mango"), each = 50))
MyDF %>% group_by(Fruit) %>% summarize(MyVal = myFun(.))

這行不通。 我的 data.frame 或 tibble 中的每個組都得到相同的值。 然后我嘗試使用帶有purrr的東西:

MyDF %>% group_by(Fruit) %>% map(.f = myFun)

顯然,這是期望字符數據作為輸入,所以不是這樣。

下一個變體基本上是我需要的,但是 output 是一個列表列表,而不是每個 Fruit 值都有一行的小標題:

MyDF %>% group_by(Fruit) %>% group_map(~ myFun(.))

我們可以在 group_modify 中使用 OP 的group_modify

library(dplyr)
MyDF %>% 
   group_by(Fruit) %>% 
   group_modify(~ .x %>% summarise(MyVal = myFun(.x))) %>%
   ungroup

-輸出

# A tibble: 2 × 2
  Fruit  MyVal
  <chr>  <int>
1 Apple  42925
2 Mango 295425

或在group_map

MyDF %>% 
   group_by(Fruit) %>%
   group_map(~ bind_cols(.y, MyVal = myFun(.))) %>%
   bind_rows
# A tibble: 2 × 2
  Fruit  MyVal
  <chr>  <int>
1 Apple  42925
2 Mango 295425

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM