如何从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创建的表对象。表对象继承自矩阵。感谢您的解决方案,第一个解决方案适用于我的数据。虽然我的第一个问题可能会让你成为一个恼人的例子,但你为我节省了很多时间。再次感谢你:)