我撰寫了一個函式,該函式將多列作為輸入,我想將其應用于分組的 tibble,我認為這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)
顯然,這是期望字符資料作為輸入,所以不是這樣。
下一個變化基本上是我需要的,但輸出是一個串列串列,而不是每個 Fruit 值都有一行的小標題:
MyDF %>% group_by(Fruit) %>% group_map(~ myFun(.))
uj5u.com熱心網友回復:
我們可以在 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其中.y是分組列
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/378685.html
上一篇:為什么stringr::str_order(x,numeric=T)結合dplyr::arrange與硬括號對資料的排序方式不同?
下一篇:填寫字母所在的單詞
