r для циклического просмотра ChickWeight - PullRequest
0 голосов
/ 15 апреля 2019

Обновленный вопрос. Надеюсь, теперь он имеет больше смысла

Мои извинения Да, я знаю, что выполнение цикла for неэффективно, но по сути это всего лишь тест, который мне нуженделать.По сути, мне нужно, чтобы он перебирал ChickWeight на основе диеты, если он равен 1, 2, 3 или 4, его нужно представить на графике, где у каждой диеты есть своя цветная линия.

Что у меня естьдо сих пор, что кажется правильным курсом, но происходит то, что все строки обновляются до конечного цвета:

plot(ChickWeight$Time, ChickWeight$weight, type = "n",
     main = "Weight vs Age", xlab = "Time (days)", ylab = "Weight (grames)"
     )

dietLength = length(ChickWeight$Diet)
for(i in 1:dietLength){
  if(ChickWeight$Diet[i] == 1){
    lines(ChickWeight$Time, ChickWeight$weight, col = "black")
  } else if(ChickWeight$Diet[i] == 2){
    lines(ChickWeight$Time, ChickWeight$weight, col = "blue")
  } else if(ChickWeight$Diet[i] == 3){
    lines(ChickWeight$Time, ChickWeight$weight, col = "green")
  } else if(ChickWeight$Diet[i] == 4){
    lines(ChickWeight$Time, ChickWeight$weight, col = "red")
  }
}

Так что, если вы запустите приведенный выше код, все строки станут красными,где мне нужно, чтобы он был черным, синим, зеленым, красным (цвета не имеют большого значения, просто предпочтения)

1 Ответ

0 голосов
/ 15 апреля 2019

Исходя из желаемого результата, вы можете использовать другие методы, кроме цикла for.Проблема, однако, заключается в том, что на каждой диете есть несколько цыплят.Вместо определения новой переменной, основанной на цвете, вы можете использовать функции dplyr, чтобы сгруппировать переменные и суммировать weight перед тем, как отобразить его.

library(tidyverse)

ChickWeight %>% 
  mutate(Diet = as_factor(Diet)) %>% 
  group_by(Diet, Time) %>% 
  summarize(avg_weight = mean(weight)) %>% 
  ggplot(aes(x = Time, y = avg_weight, color = Diet)) + 
  geom_line()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...