我的数据集如下所示:
a<-c(1,1,1,2,2,2,3,3,3)
b<-rep(1:3,3)
c<-c(rep(c("i","j","k","l"),2),"o")
d<-data.frame(a,b,c)
给出:
a b c
1 1 1 i
2 1 2 j
3 1 3 k
4 2 1 l
5 2 2 i
6 2 3 j
7 3 1 k
8 3 2 l
9 3 3 o
我正在寻找一种方法将c转换为以下形式:
1 2 3
1 i j k
2 l i j
3 k l o
所以基本上我希望使用a
作为行索引,b
作为列索引,然后将列c
转换为矩阵。有没有什么办法可以通过使用data.table或其他包来有效地完成?
非常感谢你们!
答案 0 :(得分:1)
mx <- with(d, matrix(ncol=max(a), nrow=max(b)))
mx[as.matrix(d[1:2])] <- as.character(d$c)
[,1] [,2] [,3]
[1,] "i" "j" "k"
[2,] "l" "i" "j"
[3,] "k" "l" "o"
答案 1 :(得分:0)
正如docendo所说,你可以只使用c进行行主要布局
matrix(c, 3, byrow=T)
或者,如果你迫切希望使用a和b矢量,我建议下一个技巧
mymatrix = matrix(rep(0, 9), 3) # creating init matrix of required size
for(i in seq_along(a)){mymatrix[a[i],b[i]]=c[i]} # fill out the matrix