Как преобразовать набор данных в указанный тип матрицы c? (RStudio) - PullRequest
1 голос
/ 16 апреля 2020

Я сейчас пытаюсь преобразовать этот набор данных командных баллов:

      week AwayTeam AwayScore HomeTeam HomeScore
1    1        A         1        B         1
2    1        C         0        D         1
3    2        A         1        D         0
4    2        B         1        C         0
5    3        C         4        A         0
6    3        D         2        B         2

В матрицу, которая выглядит примерно так:

A = matrix(c(1,-1,0,0,
             0,0,1,-1,
             1,0,0,-1,
             0,1,-1,0,
             -1,0,1,0,
             0,-1,0,1),6,4,byrow = TRUE)

Строки матрицы A работают как следует: «1» - команда гостей, «-1» - команда хозяев, «0» - оставшееся место в каждом ряду. Таким образом, первая строка матрицы A - это команда A (в гостях) и команда B (дома).

Если кто-то может помочь преобразовать эти данные в такую ​​матрицу, это будет очень полезно.

1 Ответ

1 голос
/ 16 апреля 2020

Вы можете попробовать код ниже

v <- LETTERS[1:4]
A <- matrix(0,nrow = nrow(df),ncol = 4)
A[cbind(1:nrow(df),match(df$AwayTeam,v))] <- 1
A[cbind(1:nrow(df),match(df$HomeTeam,v))] <- -1

, такой что

> A
     [,1] [,2] [,3] [,4]
[1,]    1   -1    0    0
[2,]    0    0    1   -1
[3,]    1    0    0   -1
[4,]    0    1   -1    0
[5,]   -1    0    1    0
[6,]    0   -1    0    1

ДАННЫЕ

df <- structure(list(week = c(1L, 1L, 2L, 2L, 3L, 3L), AwayTeam = c("A", 
"C", "A", "B", "C", "D"), AwayScore = c(1L, 0L, 1L, 1L, 4L, 2L
), HomeTeam = c("B", "D", "D", "C", "A", "B"), HomeScore = c(1L, 
1L, 0L, 0L, 0L, 2L)), class = "data.frame", row.names = c("1", 
"2", "3", "4", "5", "6"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...