首页 > 解决方案 > R:循环遍历数据子集的向量,并针对每一个,将其与一些聚合进行比较

问题描述

假设我使用玩具数据

library(dplyr)

dat <- data.frame(
ID = letters[1:20], 
Category = rep(c(1,2),10),
Values = rnorm(20,0,1)
)

A_B <- dat[1:6,]
A_notB <- dat[7:14,]
notA_B <- dat[15:16,]
notA_notB <- dat[17:20,]

对于每个子集,我想计算其按类别分组的方差,我可以这样做。但是,对于每个子集,我还想将其按类别分组的方差与三个备选方案进行比较。

如果我只使用子集的示例,最容易解释A_B。我想将其分组方差与以下各项的分组方差进行比较:

(1) 所有不在的数据A_B

(2) 变量中所有以notA(和 的notA_B并集notA_notB)开头的数据,

(3) 以结尾的所有数据notB

有没有办法在 for 循环中完成此操作,或者数据的三个分组是否如此依赖于子集的名称,而只是暴力地为每个案例写出代码真的是最有效的继续方式?

标签: r

解决方案


您可以将函数拆分数据库构建为“案例”与休息,并应用于不同案例列表以查看所有差异比较

  Case <- c("A_B", "A_notB", "notA_B", "notA_notB")

  Total <- rbind(cbind(A_B, gr="A_B"),
        cbind(A_notB, gr="A_notB"),
        cbind(notA_B, gr="notA_B"),
        cbind(notA_notB, gr="notA_notB"))

  vargr_comp <- function(case){
     Total%>%
      mutate(split = ifelse(gr==case, case, paste0("not ", case)))%>%
      group_by(split, gr, Category)%>%
      summarise(var=var(Values))
  }

  lapply(Case, vargr_comp)

推荐阅读