我有一个这样的数据框:
V1 V2 V3
1 1 1 0.0000000
2 2 1 1.6646331
3 3 1 1.6649136
4 4 1 1.7420642
5 5 1 1.4441743
6 6 1 0.7544465
7 7 1 1.9796860
8 8 1 1.0744425
9 9 1 2.1503288
10 10 1 1.0408388
11 11 1 2.0822162
....
841 29 29 0.0000000
我想将此数据框转换为矩阵。在此矩阵中,V2
应为行,V1
应为列
[1] [2] [3] [4] ....
[1] 0.0000000 1.6646331 1.664936 1.7420642...
我怎么能在r?
中这样做答案 0 :(得分:4)
假设你的矩阵有连续的值(即矩阵中没有间隙)并且值的运行顺序是连续的(即row1; columns1:10,row2; columns1:10 ......等),那么......
获取相应列中的值(在您的情况下为V3
)并根据矩阵大小的参数重新整形...
m <- matrix( df$V3 , ncol = max(df$V1) , nrow = max(df$V2) , byrow = TRUE )
#[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11]
#[1,] 0 1.664633 1.664914 1.742064 1.444174 0.7544465 1.979686 1.074442 2.150329 1.040839 2.082216
如果您需要匹配这些值(即运行顺序不连续),那么您可以利用矢量化矩阵下标,如此......
# Create empty matrix
m <- matrix( NA, ncol = max(df$V1) , nrow = max(df$V2) )
# Then fill with values at defined locations
m[ cbind( df$V2 , df$V1 ) ] <- df$V3
答案 1 :(得分:1)
你需要做两件事:
t
功能)首先创建一些示例数据
d = data.frame(V1=runif(5), V2= 5+runif(5), V3 = 10+runif(5))
然后
t(d[, ncol(d):1])
或
t(d)[ncol(d):1, ]
答案 2 :(得分:0)
这应该可以胜任(df
是你的数据框)
m <- do.call(cbind, df)