R Reshape cast (): помогите рассчитать стандартную ошибку - отсутствует функция агрегирования: длина по умолчанию

Я несколько раз видел эту проблему изменения формы на 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))

person Alice Hobbs    schedule 22.09.2016    source источник
comment
У вас есть несколько наблюдений для некоторых комбинаций видов и bulb.type. Если ваша формула cast не приводит к уникальной идентификации значений, cast по умолчанию использует агрегацию (отсюда и предупреждающее сообщение). Если вы хотите произвести широкое преобразование без агрегирования, вам понадобится дополнительная переменная, чтобы строки широкого набора данных были однозначно идентифицированы.   -  person aosmith    schedule 27.09.2016
comment
Привет Aosmith, Спасибо за ваш совет. Итак, я решил проблему cast(), манипулируя своим фреймом данных. Вы случайно не знаете, как рассчитать стандартную ошибку на строку из sd, используя приведенный выше код R (объект: 'Bulb.means.sd'). Эта информация будет принята с благодарностью.   -  person Alice Hobbs    schedule 29.09.2016