Составление матрицы, которая подсчитывает количество компаний, которые получили рейтинг i в 1996 году и перешли на рейтинг j в 1997 году и рейтинг k в 1998 году - PullRequest
0 голосов
/ 30 октября 2018

Я пытаюсь создать матрицу, используя функцию, которая подсчитывает количество «идентификаторов», которые были в «RATING» i в «YEAR» 1996, а затем перемещены в «RATING» k в «YEAR» 1997, а затем перешел на «РЕЙТИНГ» k в «ГОД» 1998.

Я полагаю, что метки строк матрицы были бы комбинациями "RATING" i и "RATING" j, а метки столбцов матрицы были бы "RATING" k.

Сумма каждой строки должна быть суммой всех "ID", которые были "RATING" i в 1996 году и "RATING" k в 1997 году.

Это мои образцы данных.

df <- rbind(df, data.frame("ID"=c('6387', '6387', '6387', '6403', '6403', '6403', '6408', '6408', '6408', '6411', '6411', '6411', '6413', '6413', '6413', '6422', '6422', '6422', '6427', '6427', '6427')))
df <- cbind(df, data.frame("YEAR"=c('1996', '1997', '1998', '1996', '1997', '1998', '1996', '1997', '1998', '1996', '1997', '1998', '1996', '1997', '1998', '1996', '1997', '1998', '1996', '1997', '1998')))
df <- cbind(df, data.frame("RATING"=c('Aa', 'Ba', 'Ba', 'B', 'Caa', 'Caa', 'A', 'Ba', 'Ba', 'B', 'Ba', 'B', 'B', 'Caa', 'Caa', 'B', 'B', 'B', 'Caa', 'B', 'Caa')))

Используя код, предоставленный @Muffindorf:

df_long <- spread(df, YEAR, RATING)
df_long$c9697 <- paste(df_long$`1996`, df_long$`1997`, sep = '-')
as.matrix(table(df_long$c9697, df_long$`1998`))

дает мне:

       A Aa B Ba Caa
 A-Ba  0  0 0  1   0
 Aa-Ba 0  0 0  1   0
 B-B   0  0 1  0   0
 B-Ba  0  0 1  0   0
 B-Caa 0  0 0  0   2
 Caa-B 0  0 0  0   1

Метки строк показывают нам предыдущие рейтинги в 1996 и 1997 годах, метки столбцов показывают нам рейтинг в 1998 году, а элементы сообщают нам количество идентификаторов, которые следовали за переходами.

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

1 Ответ

0 голосов
/ 30 октября 2018

Это то, что вы ищете?

library(tidyr)

df_long <- spread(df, YEAR, RATING)

df_long$c9697 <- paste(df_long$`1996`, df_long$`1997`, sep = '-')

as.matrix(table(df_long$c9697, df_long$`1998`))

Конечно, здесь не все комбинации рейтингов, но я думаю, вы можете добавить их вручную

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