循环与列绑定

时间:2014-08-04 13:27:25

标签: r loops matrix cbind

我是自学成才用R所以请耐心等待我。

我有类似以下数据集:

individual  value
a   0.917741317
a   0.689673689
a   0.846208486
b   0.439198006
b   0.366260159
b   0.689985484
c   0.703381117
c   0.29467743
c   0.252435687
d   0.298108973
d   0.42951805
d   0.011187204
e   0.078516181
e   0.498118235
e   0.003877632

我想用column1中的a值,column2中b的值等创建一个矩阵。[我还在每列的底部添加1以用于以后的代数运算]

到目前为止我已尝试过:

  for (i in unique(df$individual)) {
    values <- subset(df$value, df$individual == i)
    m <- cbind(c(values[1:3],1))

  }

我得到一个带有最后个别值的(4,1)矩阵。是什么让它为每个循环添加添加剂并获得与个体一样多的列?

1 个答案:

答案 0 :(得分:2)

此操作被称为&#34;重塑&#34;。有一个基本功能,但我发现使用reshape2包更容易:

DF <- read.table(text="individual  value
a   0.917741317
a   0.689673689
a   0.846208486
b   0.439198006
b   0.366260159
b   0.689985484
c   0.703381117
c   0.29467743
c   0.252435687
d   0.298108973
d   0.42951805
d   0.011187204
e   0.078516181
e   0.498118235
e   0.003877632", header=TRUE)

DF$id <- 1:3

library(reshape2)
DF2 <- dcast(DF, id ~ individual)
DF2[,-1]
#          a         b         c         d           e
#1 0.9177413 0.4391980 0.7033811 0.2981090 0.078516181
#2 0.6896737 0.3662602 0.2946774 0.4295180 0.498118235
#3 0.8462085 0.6899855 0.2524357 0.0111872 0.003877632