在 R 中的模拟过程中分组和识别最大值

Grouping and Identifying the Maximum During a Simulation in R

我正在尝试在 R 中进行一些模拟,但我被困在我需要做的循环中。我能够在一次迭代中得到我需要的东西,但是尝试编写循环代码让我失望。这就是我在一次迭代中所做的。

    Subjects <- c(1,2,3,4,5,6)
    Group <- c('A','A','B','B','C','C')
    Score <- rnorm(6,mean=5,sd=1)
    
    Example <- data.frame(Subjects,Group,Score)
    
    library(dplyr)
    
    Score_by_Group <- Example %>% group_by(Group) %>% summarise(SumGroup = sum(Score))
    Score_by_Group$Top_Group <- ifelse(Score_by_Group[,2] == max(Score_by_Group[,2]),1,0)

Group     SumGroup    Top_Group      
1 A         8.77          0
2 B         6.22          0
3 C         9.38          1

我需要我的循环做的是,运行 以上 'X' 次,每次该组得分最高时,将其添加到先前的结果中。例如,如果循环是 x=10,我需要这样的结果:

Group    Top_Group      
1 A          3
2 B          5
3 C          2

我认为这应该可行:

library(dplyr)

Subjects <- c(1,2,3,4,5,6)
Group <- c('A','A','B','B','C','C')

Groups <- c('A','B','C')
Top_Group <- c(0,0,0)


x <- 10

for(i in 1:x) {
    Score <- rnorm(6,mean=5,sd=1)
    
    Example <- data.frame(Subjects,Group,Score)
    

    
    Score_by_Group <- Example %>% group_by(Group) %>% summarise(SumGroup = sum(Score))
    Score_by_Group$Top_Group <- ifelse(Score_by_Group[,2] == max(Score_by_Group[,2]),1,0)

    Top_Group <- Top_Group + Score_by_Group$Top_Group
}

tibble(Groups, Top_Group)

如果你不介意放弃 for 循环,我们可以使用 replicate 重复代码,然后将输出绑定在一起,然后总结。

library(tidyverse)

run_sim <- function()
{
  Subjects <- c(1, 2, 3, 4, 5, 6)
  Group <- c('A', 'A', 'B', 'B', 'C', 'C')
  Score <- rnorm(6, mean = 5, sd = 1)

  Example <- data.frame(Subjects, Group, Score)

  Score_by_Group <- Example %>%
    group_by(Group) %>%
    summarise(SumGroup = sum(Score)) %>%
    mutate(Top_Group = +(SumGroup == max(SumGroup))) %>%
    select(-SumGroup)
}


results <- bind_rows(replicate(10, run_sim(), simplify = F)) %>%
  group_by(Group) %>% 
  summarise(Top_Group = sum(Top_Group))

输出

  Group Top_Group
  <chr>     <int>
1 A             3
2 B             3
3 C             4