如何在R中的数据框内为多个组运行相同的代码?

时间:2018-01-29 20:09:02

标签: r loops

我从未在R中使用循环或应用函数,我意识到我的代码看起来很乱,因为我一遍又一遍地重复相同的代码行。

我有一个名为"行为"的数据集。使用我的研究组的不同复制组(" EC1:EC8; N1:N12),我想分别为这些组中的每个组运行完全相同的函数集。

我正在做的只是复制下面的整个代码,但交换每个EC6让我们说EC7。最后,我得到20次相同的重复,这是相当耗时,低效和业余的。我只是想知道如何在将文件名与组名匹配时自动化整个事物。非常感谢你(下面的代码)。

    EC6 <- filter(behavior, groupID == "EC6")
EC6_scores <-elo.seq(winner= EC6$MaleID, loser= EC6$FemaleID, Date= EC6$NewDate)
EC6_result <- EC6_scores[["mat"]]
EC6_result<- melt(EC6_result,
                  na.rm = FALSE, value.name = "ELO_SCORE",
                  factorsAsStrings = TRUE)
EC6_result <- EC6_result %>%
  rename(Male=Var2, Day = Var1)
ggplot(EC6_result, aes(x = Day, y = ELO_SCORE, group = Male, colour=Male)) +
  geom_point(size=4, alpha = 0.8) +
  geom_line() +
  scale_x_continuous(breaks=EC6_result$Day,labels = EC6_result$Day) +
  labs(title = "EC6") +
  theme_bw()

1 个答案:

答案 0 :(得分:0)

由于原始数据集不可用,因此很难完全开发代码,但如果使用循环,我会做类似的事情。

for (group in 1:length(unique(df$groupColumn))){

  currentGroup = unique(df$groupColumn)[group]

  groupFilter <- filter(behavior, groupID == currentGroup)

  group_result <- groupFilter[["mat"]]
  ...
  ggplot(...)
}

wheredf$groupColumn是包含所有不同组的原始数据框的列。

但是,对于评论中发布的其他用途,使用dplyr解决方案更有效。