簡體   English   中英

R purrr:map 在分組/嵌套的小標題上

[英]R purrr:map on a grouped/nested tibble

我想在嵌套分組 tibble 的列中應用 function,如下例所示。

library(tidyverse)
df <- swiss %>%
  group_by(Catholic > 20) %>%
  nest()

這會產生一個看起來像這樣的小標題:

> df
# A tibble: 2 x 2
# Groups:   Catholic > 20 [2]
  `Catholic > 20` data             
  <lgl>           <list>           
1 FALSE           <tibble [26 × 6]>
2 TRUE            <tibble [21 × 6]>

現在我制作了一些 function 來構建 model

fit <- function(df, modL = NA){
  if (modL == 1) {fit <- lm(Fertility ~ Education, data = df)}
  if (modL == 2) {fit <- lm(Fertility ~ Education + Examination, data = df)}
  fit
}

現在我將 map 將 model 放到分組數據的列中,並創建兩個新變量來存儲 model 擬合。

df <- df %>%
  mutate(model1 = map(data, fit, modL = 1)) %>%
  mutate(model2 = map(data, fit, modL = 2)) 

這會產生一個包含兩個新列的小標題,其中包含 model 適合

> df
# A tibble: 2 x 4
# Groups:   Catholic > 20 [2]
  `Catholic > 20` data              model1 model2
  <lgl>           <list>            <list> <list>
1 FALSE           <tibble [26 × 6]> <lm>   <lm>  
2 TRUE            <tibble [21 × 6]> <lm>   <lm> 

我想要實現的是一個 purr 型 map function 與以下代碼執行相同的操作。

anova(df$model1[[1]], df$model2[[1]])
anova(df$model1[[2]], df$model2[[2]])

我雖然下面的代碼可以工作,但它沒有。

map(df[,3:4], anova)

大師們,我如何在嵌套和分組數據集的列中使用 map 和 function 以使用該行的列作為輸入為每行提供一個結果?

布蘭特


df %>%
  mutate(anova = map2(model1, model2, ~ anova(.x,.y)))%>%
  mutate(pvalue = map_dbl(anova, ~.$`Pr(>F)`[2]))


我想這就是你想要的? 你能澄清一下嗎? 第二個變異將提取每個成對比較的 anova 的 p 值。

暫無
暫無

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

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