Используя R. Мне нужно растопить или изменить мой фреймворк о скачках - PullRequest
1 голос
/ 27 мая 2020

Я новичок в группе и Р. Я уже задавал вопрос раньше и очень благодарен за предоставленную помощь, но понял, что мне не очень понятно. Надеюсь, это лучшая попытка прояснить мою проблему. Заранее благодарим всех, кто может помочь.

У меня есть набор данных, который содержит имена скаковых лошадей вместе с рейтингом производительности каждой скаковой лошади, «DaH» (целое число) и типом скачек, в которых лошади участвовали, в «Коде» , (символ).

В наборе данных есть 7 лошадей с рейтингами производительности (DaH) для последних 3 гонок, от DaH1 до DaH3, где DaH1 - это рейтинг производительности для последней / последней гонки, а DaH3 - лошади рейтинг производительности от 3 гонок go. Точно так же коды, от Code1 до Code3, предоставляют код, в котором бежала лошадь.

Итак, глядя на набор данных ниже, вы можете увидеть, что лошадь2 участвовала в гонке с кодом C в своей последней гонке и достигла производительности рейтинг DaH1 составляет 124.

Я импортирую данные о скачках от поставщика данных о скачках.

> racehorse_data
  Code1 DaH1 Code2 DaH2 Code3 DaH3
1     C    0     C  124     C  127
2     C  124     C  117     C    0
3     C  121     C  125     C    0
4     C  123     C  120     C  124
5     C    0     C  125     H  122
6     H  122     C    0     C  137
7     C  110     H  115     C  127  
structure(list(Code1 = c("C", "C", "C", "C", "C", "H", "C"), 
    DaH1 = c(0L, 124L, 121L, 123L, 0L, 122L, 110L), Code2 = c("C", 
    "C", "C", "C", "C", "C", "H"), DaH2 = c(124L, 117L, 125L, 
    120L, 125L, 0L, 115L), Code3 = c("C", "C", "C", "C", "H", 
    "C", "C"), DaH6 = c(127L, 0L, 0L, 124L, 122L, 137L, 127L)), class = "data.frame", row.names = c(NA, 
-7L))

Мне нужно рассчитать средний рейтинг DaH для каждой лошади, как только я исключены все оценки производительности, достигнутые в коде, отличном от кода «C». Чтобы уточнить: проблема, с которой я столкнулся, заключается в том, что мне нужно удалить все рейтинги производительности, DaH, где код гонки не был гонкой кода 'C'.

Так, например, вы можете увидеть эта лошадь 6 участвовала в гонке с кодом «H» в своем последнем забеге. Это необходимо удалить из набора данных, чтобы остались только две гонки, у которых лошадь 6 достигла DaH2 = 0 и DaH3 = 137, чтобы получить средний рейтинг DaH 68,5 для двух ее гонок с кодом C.

I Мы играли с командой MELT, пытаясь добиться перенастроенного фрейма данных, который позволит мне отфильтровать рейтинги DaH, где код гонки не был равен «C». Но мне не удалось этого добиться.

Мне пришло в голову, что я могу изолировать каждую лошадь DaH и Code как отдельный фрейм данных и работать с каждой лошадью по отдельности, но это кажется более сложным, чем мне хотелось бы.

Мой идеальный результат - это фрейм данных, например:

> racehorse_data
   DaH1   DaH2  DaH3    Mean
1     0    124   127    83.7
2   124    117     0    80.3
3   121    125     0    82
4   123    120   124    122.3
5     0    125    na    62.5
6    na      0   137    68.5
7   110     na   127    118.5

Или, возможно, отдельный вектор для каждой лошади

horse 1     0   124 127 83.7
horse 2     124 117 0   80.3
etc

Большое спасибо, Грэм

1 Ответ

0 голосов
/ 27 мая 2020

В Base-R:

сначала мы меняем соответствующие значения, отличные от C, на NA

racehorse_data[,c(2,4,6)][racehorse_data[,c(1,3,5)]!="C"] <- NA

Затем мы обрезаем фрейм данных и получаем строку означает игнорирование значений NA

racehorse_data <- racehorse_data[,c(2,4,6)]
racehorse_data$Mean <- apply(racehorse_data,1,mean,na.rm=T)

вывод:

> racehorse_data
  DaH1 DaH2 DaH6      Mean
1    0  124  127  83.66667
2  124  117    0  80.33333
3  121  125    0  82.00000
4  123  120  124 122.33333
5    0  125   NA  62.50000
6   NA    0  137  68.50000
7  110   NA  127 118.50000
...