Как только у Вас есть исключение эти две вещи, которыми Вы интересуетесь, Система. Диагностика. StackTrace и Система. Диагностика. StackFrame
Там является примером MSDN здесь
Мне тоже всегда сложно изменить форму, но, похоже, это всегда срабатывает после небольших проб и ошибок. Вот что я в итоге обнаружил:
> x
unique_id seq response detailed.name treatment
1 a N1 123.23 dN1 T1
2 a N2 231.12 dN2 T1
3 a N3 231.23 dN3 T1
4 b N1 343.23 dN1 T2
5 b N2 281.13 dN2 T2
6 b N3 901.23 dN3 T2
> x2 <- melt(x, c("seq", "detailed.name", "treatment"), "response")
> x2
seq detailed.name treatment variable value
1 N1 dN1 T1 response 123.23
2 N2 dN2 T1 response 231.12
3 N3 dN3 T1 response 231.23
4 N1 dN1 T2 response 343.23
5 N2 dN2 T2 response 281.13
6 N3 dN3 T2 response 901.23
> cast(x2, seq + detailed.name ~ treatment)
seq detailed.name T1 T2
1 N1 dN1 123.23 343.23
2 N2 dN2 231.12 281.13
3 N3 dN3 231.23 901.23
Ваши исходные данные уже были в длинном формате, но не в длинном формате, который используется при расплавлении / литье. Я переплавил его. Второй аргумент (id.vars) - это список вещей, которые нельзя таять. Третий аргумент (measure.vars) - это список вещей, которые меняются.
Затем при приведении используется формула. Слева от тильды находятся объекты, которые остаются такими, какие они есть, а справа от тильды - столбцы, которые используются для кондиционирования столбца значений.
Более или менее ...!
Основываясь на ответе Харлана - этапа переплавки можно избежать, если данные уже представлены в длинном формате, а значения столбца указаны в вызове cast
.
> x <- read.table(textConnection(" unique_id seq response detailed.name treatment
+ 1 a N1 123.23 dN1 T1
+ 2 a N2 231.12 dN2 T1
+ 3 a N3 231.23 dN3 T1
+ 4 b N1 343.23 dN1 T2
+ 5 b N2 281.13 dN2 T2
+ 6 b N3 901.23 dN3 T2"))
>
> cast(x, seq + detailed.name ~ treatment, value = "response")
seq detailed.name T1 T2
1 N1 dN1 123.23 343.23
2 N2 dN2 231.12 281.13
3 N3 dN3 231.23 901.23
Вы также можете использовать функцию reshape
в пакете stats
. У меня нет вашего образца набора данных, но он будет выглядеть примерно так:
reshape(x, idvar=c("seq","detailed.name"), timevar="treatment", direction="wide")