Как использовать cast in reshape без агрегации

Во многих случаях использования приведения, которые я видел, используется функция агрегирования, такая как среднее значение.

Как насчет того, чтобы просто изменить форму без потери информации. Например, если я хочу использовать этот длинный формат:

ID     condition    Value
John   a            2
John   a            3
John   b            4
John   b            5
John   a            6
John   a            2
John   b            1
John   b            4

К этому широкоформатному без агрегации:

ID    a  b
John  2  4
John  3  5
Alex  6  1
Alex  2  4

Я предполагаю, что это предполагает, что наблюдения парные, и вам не хватает значения, это испортит, но любое понимание приветствуется


person aleph4    schedule 11.05.2013    source источник
comment
Две вещи: 1. ваш широкоформатный формат не соответствует данным длинного формата, поскольку Alex не отображается в длинном формате. 2. Откуда вы знаете, что a==2 и b==4 идут вместе вместо a==2 и b==5 или какой-либо другой комбинации значений? Я предполагаю, что вы не показываете столбец, указывающий на эксперимент или какой-либо другой идентификатор ...   -  person Chase    schedule 12.05.2013
comment
@Chase, я предполагаю, что у них просто две строки для каждой комбинации условий ID *. Но больше информации от aleph4 не помешало бы ...   -  person Dason    schedule 12.05.2013


Ответы (1)


В таких случаях вы можете добавить порядковый номер:

library(reshape2)

DF$seq <- with(DF, ave(Value, ID, condition, FUN = seq_along))
dcast(ID + seq ~ condition, data = DF, value.var = "Value")

Последняя строка дает:

    ID seq a b
1 John   1 2 4
2 John   2 3 5
3 John   3 6 1
4 John   4 2 4

(Обратите внимание, что мы использовали образец ввода из вопроса, но образец вывода в вопросе не соответствует образцу ввода.)

person G. Grothendieck    schedule 12.05.2013