我有一个由邻接表组成的列表,数据看起来像这样
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"))