Reshape2 приведение кадра данных с некоторыми повторяющимися значениями - PullRequest
1 голос
/ 02 апреля 2012

Я пытаюсь использовать пакет reshape2 для перераспределения столбцов в верхней части моего набора данных.У меня температура и Хл-а измерены дважды на трех участках.Однако, когда я расплавляю и отливаю фрейм данных, fun.aggregate по умолчанию принимает длину.Я хочу сохранить исходные значения.Вот пример набора данных:

library(reshape2)
library(stringr)
df=data.frame(site=rep(1:3,each=2),temp_2009=c(23,24,25,25,23,43),chla_2009=c(3,2,3,4,5,6),
          temp_2010=c(23,25,26,27,23,23),chla_2010=c(2,3,5,6,2,1))
df2=melt(df,id.vars=1,measure.vars=c(2:5))
df2=cbind(df2,data.frame(str_split_fixed(df2$variable,"_",2)))
df2=df2[,-2]
names(df2)[3:4]=c("variable","year")
dcast(df2,site+year~variable)

Я думаю, это как-то связано с тем, как reshape2 обрабатывает дублирующиеся значения.

Есть мысли?

Ответы [ 2 ]

3 голосов
/ 02 апреля 2012

Строки агрегируются, так как dcast не может различить их на основании предоставленной формулы. Если вы хотите сохранить исходные значения, вам нужно будет включить поле для уникальной идентификации дубликатов. Чтобы продолжить ваш код ...

df2$group <- rep(1:2,12)
dcast(df2,site+year+group~variable)

Очевидно, что этот код немного упрощен (в частности, ваши данные должны быть отсортированы по «группе» без пропущенных значений), но он должен продемонстрировать, как сохранить исходные значения.

1 голос
/ 25 января 2016

Другой вариант, который пытается выполнить dcast для расплавленного набора данных с дублирующимися значениями, состоит в том, чтобы получить dcast для вычисления среднего значения / медианы / мин / макс (независимо от того, что наиболее актуально в зависимости от вашего случая) для «устранения» дубликатов.

 dcast(df2, site+year~variable, fun.aggregate = mean)

Очевидно, что удаляет (объединяет) записи - что, по мнению ОП, нежелательно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...