如何从r中的列表创建矩阵

如何从r中的列表创建矩阵,r,list,matrix,R,List,Matrix,我有一个由邻接列表组成的列表,数据如下 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 ... 我想让一个类似矩阵的列由测试编号组成,行由用户

我有一个由邻接列表组成的列表,数据如下

    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  ...
我想让一个类似矩阵的列由测试编号组成,行由用户ID组成 矩阵中的细胞是最硬的,如下图所示

   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
tapply(df$hardest,df[,c("User_ID","Test")],sum)
如果它是你想要的矩阵

 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

x1从基本包,您可以尝试

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
tapply(df$hardest,df[,c("User_ID","Test")],sum)

除了下面的好答案之外,基本R解决方案
重塑(df,idvar=“User\u ID”,timevar=“Test”,direction=“wide”)
我认为您不需要将矩阵类分配给
xtabs创建的表对象。表对象继承自矩阵。感谢您的解决方案,第一个解决方案适用于我的数据。虽然我的第一个问题可能会让你成为一个恼人的例子,但你为我节省了很多时间。再次感谢你:)