Я несколько раз видел эту проблему изменения формы на SO, но не могу найти решение моей конкретной проблемы;
У меня есть фрейм данных под названием DF (ниже), и я вычислил среднее значение и стандартное отклонение, используя cast() для всех интересующих строк и столбцов.
Bulb.means.sd<-cast(DF, Bat.Species~Bulb.Type, c(mean,sd), value="Bat.Passes")
Я пытаюсь cast() использовать необработанные значения из DF, которые я хотел бы включить в виде одного столбца во фрейм данных (выше) с тем же широким форматом. Однако cast() выдает приведенное ниже сообщение об ошибке. После того, как необработанные значения были ассимилированы, я подумал об использовании ddply для расчета стандартной ошибки (расчет ниже) для каждой строки из необработанных значений.
Bulb.raw<-cast(DF, Bat.Species~Bulb.Type, value='Bat.Passes')
Это сообщение об ошибке:
Aggregation requires fun.aggregate: length used as default
Моя попытка с ddply буквально выводит те же значения, содержащиеся в столбце Control_sd, что и во фрейме данных Bulb.means.sd.
se <- ddply(Bulb.means.sd, c("Bat.Species"), summarise,
N = length(Control_sd),
se = Control_sd / sqrt(N))
Есть ли у кого-нибудь предложения о том, как создать фрейм данных, такой как Bulb.means.sd, содержащий среднее значение, стандарт, отклонение и стандартную ошибку для каждой строки, используя одну строку кода, или кто-нибудь знает, что неправильный код (выше) с использованием функции ddply()?
Заранее большое спасибо, если кто-то может помочь, это глубоко ценится.
DF<-structure(list(Bat.Species = structure(c(2L, 8L, 9L, 7L, 6L,
5L, 3L, 1L, 4L, 10L, 2L, 8L, 9L, 7L, 6L, 5L, 3L, 1L, 4L, 10L,
2L, 8L, 9L, 7L, 6L, 5L, 3L, 1L, 4L, 10L, 2L, 8L, 9L, 7L, 6L,
5L, 3L, 1L, 4L, 10L, 2L, 8L, 9L, 7L, 6L, 5L, 3L, 1L, 4L, 10L,
2L, 8L, 9L, 7L, 6L, 5L, 3L, 1L, 4L, 10L, 2L, 8L, 9L, 7L, 6L,
5L, 3L, 1L, 4L, 10L, 2L, 8L, 9L, 7L, 6L, 5L, 3L, 1L, 4L, 10L,
2L, 8L, 9L, 7L, 6L, 5L, 3L, 1L, 4L, 10L, 2L, 8L, 9L, 7L, 6L,
5L, 3L, 1L, 4L, 10L), .Label = c("Barbestrellus barbestrellus",
"Eptesicus.serotinus ", "Myotic brandii", "Myotis daubentonii",
"Nyctalus leileri", "Nyctalus noctule", "Pipestrellus Nasthusii",
"Pipestrellus pipestrelle", "Pipestrellus pygmaeus", "Pleocutus auritus "
), class = "factor"), Bat.Passes = c(0L, 0L, 0L, 0L, 0L, 0L,
3L, 0L, 9L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 6L, 0L, 0L, 0L, 0L, 0L,
0L, 4L, 0L, 0L, 3L, 0L, 9L, 0L, 0L, 0L, 7L, 0L, 0L, 0L, 6L, 0L,
0L, 0L, 0L, 86L, 7L, 17L, 0L, 48L, 6L, 2L, 0L, 0L, 0L, 86L, 28L,
8L, 50L, 48L, 1L, 2L, 0L, 0L, 0L, 20L, 0L, 0L, 0L, 0L, 0L, 2L,
1L, 0L, 0L, 8L, 0L, 0L, 3L, 0L, 0L, 2L, 1L, 1L, 0L, 0L, 0L, 0L,
2L, 0L, 0L, 0L, 1L, 5L, 0L, 10L, 1L, 0L, 2L, 0L, 0L, 0L, 1L,
5L), Bulb.Type = structure(c(4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("Control",
"LED", "Metal.Halide", "SOX"), class = "factor")), .Names = c("Bat.Species",
"Bat.Passes", "Bulb.Type"), class = "data.frame", row.names = c(NA,
-100L))
cast
не приводит к уникальной идентификации значений,cast
по умолчанию использует агрегацию (отсюда и предупреждающее сообщение). Если вы хотите произвести широкое преобразование без агрегирования, вам понадобится дополнительная переменная, чтобы строки широкого набора данных были однозначно идентифицированы. - person aosmith   schedule 27.09.2016