簡體   English   中英

將 function 按組應用於 R 中的幾個變量

[英]Apply function to several variables by group in R

我有一些數據包含 3 個響應變量,分為 3 組,分幾批進行測試。 例如:

Batch    Type    Replicate    Y1     Y2    Y3
1         A        a           200    100   80

我需要提取我構建 function 的差異:

My_function <- function(x) {
  md_mm <- lmer(Y1 ~ (1|Batch), data = x) 
  tab_mm <- summary(md_mm)
  tab2_mm <- as.data.frame(tab_mm$varcor)
  m <- mean(x$Y1,na.rm=TRUE)
  BatchVar <-tab2_mm[1,4]
  ReptVar <- tab2_mm[2,4]
  df_mm <- data.frame(m,BatchVar, ReptVar)
  return(df_mm)
}

然后我使用它:

    table <- df %>% 
  group_by(Type) %>% 
  do(My_function(.)) %>% 
  as.data.frame()

到目前為止,這可行,但我一直在嘗試更改它,以便我可以得到它,以便表格包含所有變量的結果。 我嘗試使用 function 和 My_function(x,y) 然后 map() 所以它在所有變量上運行,如果我嘗試使用整個變量,它可以工作,當我嘗試對它進行分組時,如果出錯。 如果有人有可以提供幫助的想法,將不勝感激。 謝謝,

我創建了一個數據,試圖匹配您發布的數據:

library(tidyverse)

set.seed(123)
df <- data.frame(
  batch =  sample(c(1, 2), 100, replace = TRUE), 
  type = sample(c("A", "B"), 100, replace = TRUE), 
  replicate = sample(c("A", "B"), 100, replace = TRUE), 
  y1 = rnorm(100), 
  y2 = rnorm(100),
  y3 = rnorm(100))

現在,您可以使用group_bysummarise_if僅按組計算數值變量(您可以將var(x)替換為您的實際函數):

df %>% 
  group_by(batch, type, replicate) %>%
  summarise_if(is.numeric, function(x) {var(x)})

結果:

 batch type  replicate    y1    y2    y3
  <dbl> <fct> <fct>     <dbl> <dbl> <dbl>
1     1 A     A         0.766 1.68  2.02 
2     1 A     B         0.908 0.917 1.29 
3     1 B     A         0.979 1.53  0.567
4     1 B     B         0.911 0.727 1.33 
5     2 A     A         0.681 1.16  0.871
6     2 A     B         0.627 0.727 0.781
7     2 B     A         0.688 0.505 1.16 
8     2 B     B         1.98  0.890 0.890

暫無
暫無

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

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