我正尝试使用一个函数来计算矩阵,该函数对1996年在“年份” i中“等级” i中的“ ID”的数量进行计数,然后在“年份” 1997中移至“等级” k,然后在1998年的“ YEAR”中移至“ RATING” k。
我相信矩阵的行标签将是“ RATING” i和“ RATING” j的组合,矩阵的列标签将是“ RATING” k。
每行的总和应为1996年“ RATING”的所有“ ID”和1997年“ RATING”的所有“ ID”的总和。
这是我的示例数据。
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年的等级,元素告诉我们转换后的ID数量。
我现在需要做的是让行标签是所有可能的等级组合,包括未观察到的。上面的代码仅产生观察到的组合的行标签。
答案 0 :(得分:0)
这是您要寻找的吗?
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`))
当然,这并没有所有等级的组合,但是我想您可以手动添加它们