стандартное отклонение для разных столбцов с регулярным шагом во фрейме данных

#r

#r

Вопрос:

У меня проблема с вычислением SD в моем фрейме данных в R. Мне нужно вычислить SD для каждого столбца с помощью step=3 . Итак, SD на km 1:3 , SD на km 4:6 , …

Я уже пробовал разные решения, но, к сожалению, безуспешно:

 df <- data.frame(km = c(1:13),
A2012 = c(0.1,0.3,0.8,0.45,0.98,0.45,0.75,0.71,0.36,0.11,0.26,0.68,0.41), 
A2013 = c(0.36,0.11,0.26,0.68,0.41,0.45,0.1,0.3,0.8,0.98,0.45,0.75,0.71))
  

Ответ №1:

Это достижимо путем сокращения фрейма данных на диапазоны, а затем разделения:

 df$ranges <- cut(df$km,seq(1,13,3),include.lowest=T,right=F)
###new solution, much nicer
SDs <- aggregate(df[,2:3],list(df$ranges),sd)

### old solution
SDs <- t(sapply(split(df,df$ranges),function(df){
  apply(df[,2:3],2,sd)
}))

###solution to question in comment:

cuts <- matrix(data=c(seq(1,max(df$km)-3,2),seq(4,max(df$km),2)),ncol=2)
SDs <- t(sapply(1:nrow(cuts),function(rn)
{
  SD <- apply(subset(df,df$km >= cuts[rn,1] amp; df$km <= cuts[rn,2])[,2:3],2,sd)
  return(SD)
}))
rownames(SDs) <- apply(cuts,1,paste,collapse = "-")
colnames(SDs) <- paste0("sd(",colnames(SDs),")")
SDs
     sd(A2012) sd(A2013)
1-4  0.2954516 0.2412986
3-6  0.2644491 0.1737815
5-8  0.2171597 0.1567376
7-10 0.3039051 0.4132392
9-12 0.2412986 0.2200757

  

Комментарии:

1. Я отредактировал более приятное решение. Мое старое решение работает так же, но менее лаконично.

2. Возможно ли создать скользящий SD-файл Windows? Так, например, чтобы составить SD на КМ 1: 4, затем сделать SD на КМ 2: 6 для второго и т.д..

3. Да, в принципе, это возможно. Просто чтобы проверить, должен ли измениться размер вашего окна? Поскольку 1:4 меньше, чем 2:6

4. Это моя вина, извините. это не Windows 2: 6, а 3: 6

5. Это идеально! я пытался использовать функции «конечные точки» и «rolling_sd», но они специфичны для временных окон. Большое тебе спасибо, Джулиан.