Цикл с привязкой столбца

Я пользователь-самоучка, поэтому, пожалуйста, потерпите меня.

У меня есть что-то похожее на следующий набор данных:

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 в столбце 1, значениями для b в столбце 2 и т. д. [Я также добавляю 1 внизу каждого столбца для более поздних операций алгебры]

Я пробовал до сих пор:

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

  }

Я получаю матрицу (4,1) с последними отдельными значениями. Чего не хватает, чтобы сделать его аддитивным для каждого цикла и получить столько же столбцов, сколько и отдельных?


person user3507584    schedule 04.08.2014    source источник
comment
reshape2 - лучшее решение, но вот тупой способ matrix(DF$value, nrow = 3)   -  person Vlo    schedule 04.08.2014
comment
Мне это не кажется глупым. Назначьте res.mtx и используйте rbind( res.mtx, rep(1, ncol(res.mtx) ) )   -  person IRTFM    schedule 04.08.2014


Ответы (1)


Эта операция называется «переформированием». Есть базовая функция, но с пакетом 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
person Roland    schedule 04.08.2014
comment
Я имел в виду, что в R, кажется, много хлама/причуд/ошибок 20-летней давности. reshape2 делает программирование в R немного чище/легче; знаете ли вы о других небольших чистых пакетах, которые помогают? - person denis; 24.06.2015
comment
Это сильно зависит от того, что вы хотите сделать. Я не знаю много хлама/причуд/подводных камней 20-летней давности в R. - person Roland; 24.06.2015
comment
Итак, The R inferno — это книга о проблемных местах. , странности, ловушки, глюки в R. Все равно спасибо. - person denis; 25.06.2015