我正在嘗試在 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
uj5u.com熱心網友回復:
如果你不介意放棄 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
uj5u.com熱心網友回復:
我認為這應該有效:
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)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/467861.html
