0

我是自学成才的用户,所以请多多包涵。

我有类似以下数据集的东西:

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

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

到目前为止我已经尝试过:

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

  }

我得到一个 (4,1) 矩阵,其中包含最后一个单独的值。缺少什么来使其对每个循环都具有附加性并获得与个人一样多的列?

4

1 回答 1

2

此操作称为“重塑”。有一个基本功能,但我发现使用 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
于 2014-08-04T13:40:00.663 回答