我有一个由邻接表组成的列表,数据看起来像这样

    Test User_ID hardest
1   77      A       5
2   77      B       4
3   77      C       4
4   78      A       4
5   78      B       5
6   78      C       4
7   79      A       5
8   79      B       4  ...

我想使矩阵像列由测试编号组成,行由用户标识组成
矩阵中的单元格最难,如下图
   77   78   79
A   5    4    5
B   4    5    4
C   4    4        ....

如何将此列表转换为矩阵?

最佳答案

你可以试试

library(reshape2)
 dcast(df, User_ID~Test, value.var='hardest')
 #   User_ID 77 78 79
 #1       A  5  4  5
 #2       B  4  5  4
 #3       C  4  4 NA

如果要矩阵
 acast(df, User_ID~Test, value.var='hardest')
 #   77 78 79
 #A  5  4  5
 #B  4  5  4
 #C  4  4 NA

tidyr
 library(tidyr)
 spread(df, Test, hardest)
 #    User_ID 77 78 79
 #1       A  5  4  5
 #2       B  4  5  4
 #3       C  4  4 NA

或使用xtabs
x1 <- xtabs(hardest~User_ID+Test, df)
attr(x1, "call") <- NULL
attr(x1, "class") <- NULL
dimnames(x1) <- unname(dimnames(x1))
x1
#  77 78 79
#A  5  4  5
#B  4  5  4
#C  4  4  0

数据
df <- structure(list(Test = c(77L, 77L, 77L, 78L, 78L, 78L, 79L, 79L
), User_ID = c("A", "B", "C", "A", "B", "C", "A", "B"), hardest = c(5L,
4L, 4L, 4L, 5L, 4L, 5L, 4L)), .Names = c("Test", "User_ID", "hardest"
), class = "data.frame", row.names = c("1", "2", "3", "4", "5",
"6", "7", "8"))

09-10 01:56
查看更多