Как я могу применить "sapply" в R с несколькими кодами в одной функции?
Я новый R
пользователь. У меня простой sapply
пример функции для расчета mean
а также sd
для разделенного фрейма данных. Мои данные содержат полчаса скорости ветра с направлением. Я хочу знать ежедневное распределение Вейбулла для моего исследования в течение 13 лет. Вот почему мой набор данных разделен по времени.
Мои данные выглядят так:
Time windspeed direction Date day_index
1 24/07/2000 13:00 31 310 2000-07-24 13:00:00 2000_206
2 24/07/2000 13:30 41 320 2000-07-24 13:30:00 2000_206
3 24/07/2000 14:30 37 290 2000-07-24 14:30:00 2000_206
4 24/07/2000 15:00 30 300 2000-07-24 15:00:00 2000_206
5 24/07/2000 15:30 24 320 2000-07-24 15:30:00 2000_206
6 24/07/2000 16:00 22 330 2000-07-24 16:00:00 2000_206
7 24/07/2000 16:30 37 270 2000-07-24 16:30:00 2000_206
Пример кода R, который у меня есть для разбивки на несколько дней:
my.summary <- sapply(split(ballarat_alldata[1:200, ],
ballarat_alldata$day_index[1:200]),
function(x) {
return(c(my.mean=mean(x$windspeed),
my.sd=sd(x$windspeed)))
})
Код распределения Вейбулла для расчета параметров формы и масштаба:
set1 <- createSet(height=10,
v.avg=ballarat_alldata[,2],
dir.avg=ballarat_alldata[,3])
time_ballarat <- strptime(ballarat_alldata[,1], "%d/%m/%Y %H:%M")
ballarat <- createMast(time.stamp=time_ballarat, set1)
ballarat <- clean(mast=ballarat)
ballarat.wb <- weibull(mast=ballarat, v.set=1, print=FALSE)
Как я могу объединить эти два набора R
коды для расчета параметров Weibull каждый день и хранить в матрице?
Я пробовал много способов, но это не сработало.
Если эти два набора R
коды должны быть объединены, я должен изменить скорость ветра и диапазон направления в set1 <- createSet(height=10, v.avg=ballarat_alldata[,2], dir.avg=ballarat_alldata[,3])
тоже?
1 ответ
Кажется, что у вас есть две отдельные проблемы: 1) агрегирование ваших данных 2) вычисление параметров Вейбулла. По первому вопросу могу порекомендовать что-то вроде:
library(plyr)
Wind <- ddply(Wind, .(as.Date(Date)), transform,
Wind.mean = mean(windspeed), Wind.sd = sd(windspeed))
# windspeed direction Date2 Time2 day_index Wind.mean Wind.sd
# 1 31 310 2000-07-24 13:00:00 2000_206 36.33333 5.033223
# 2 41 320 2000-07-24 13:30:00 2000_206 36.33333 5.033223
# 3 37 290 2000-07-24 14:30:00 2000_206 36.33333 5.033223
# 4 30 300 2000-07-25 15:00:00 2000_206 28.25000 6.751543
# 5 24 320 2000-07-25 15:30:00 2000_206 28.25000 6.751543
# 6 22 330 2000-07-25 16:00:00 2000_206 28.25000 6.751543
# 7 37 270 2000-07-25 16:30:00 2000_206 28.25000 6.751543
Если вы дадите мне немного больше подсказок о том, как вы рассчитываете параметры, вы также можете использовать summarise
от plyr
библиотека, что-то вроде
ddply(Wind, .(Date2), summarise, rweibull(# I'm not sure what goes here
Надеюсь это поможет.