Pode utilizar um dos seguintes métodos para calcular o desvio padrão por grupo no R:

Método 1: Utilizar a base R

 aggregate(df$col_to_aggregate, list(df$col_to_group_by), FUN=sd) 

Método 2: Utilizar o dplyr

 library (dplyr) df %>% group_by(col_to_group_by) %>% summarise_at(vars(col_to_aggregate), list(name=sd)) 

Método 3: Utilizar data.table

 library (data.table) setDT(df) dt[ ,list(sd=sd(col_to_agregado)), by=col_to_group_by] 

Os exemplos seguintes mostram como utilizar cada um destes métodos na prática com a seguinte estrutura de dados em R:

 #create data frame df <- data. frame (team=rep(c(' A ', ' B ', ' C '), each= 6 ), points=c(8, 10, 12, 12, 14, 15, 10, 11, 12, 18, 22, 24, 3, 5, 5, 6, 7, 9)) #view data frame df team points 1 A 8 2 A 10 3 A 12 4 A 12 5 A 14 6 A 15 7 B 10 8 B 11 9 B 12 10 B 18 11 B 22 12 B 24 13 C 3 14 C 5 15 C 5 16 C 6 17 C 7 18 C 9 

Método 1: Calcular o desvio padrão por grupo usando a Base R

O código a seguir mostra como usar o agregar() da base R para calcular o desvio padrão dos pontos marcados por equipa:

 #calcular o desvio padrão dos pontos por equipa aggregate(df$points, list(df$team), FUN=sd) Grupo.1 x 1 A 2,562551 2 B 6,013873 3 C 2,041241 

Método 2: Calcular Desvio padrão por grupo usando dplyr

O código a seguir mostra como usar o grupo_por () e resumir_at() funções do dplyr para calcular o desvio padrão dos pontos marcados por equipa:

 biblioteca (dplyr)  #Calcular o desvio padrão dos pontos marcados pela equipa  df %>% group_by(team) %>% summarise_at(vars(points), list(name=sd))  # Um dado: 3 x 2 nome da equipa 1 A 2,56 2 B 6,01 3 C 2,04 

Método 3: Calcular o desvio padrão por grupo usando data.table

O código seguinte mostra como calcular o desvio padrão dos pontos marcados por equipa utilizando funções do dados.tabela pacote:

 biblioteca (data.table)  #converter o quadro de dados em tabela de dados setDT(df) #calcular o desvio padrão dos pontos marcados pela equipa  df[ ,list(sd=sd(pontos)), by=equipa] equipa sd 1: A 2,562551 2: B 6,013873 3: C 2,041241 

Repare que os três métodos apresentam os mesmos resultados.

Nota Se estiver a trabalhar com um quadro de dados extremamente grande, recomenda-se a utilização do dplyr ou dados.tabela uma vez que estes pacotes têm um desempenho muito mais rápido do que o R de base.