Questão:
Agrupando dados em intervalos em R, somando-os
Xavier
2011-08-16 04:55:20 UTC
view on stackexchange narkive permalink

Tenho dados como este:

  ano nb1 1901 2082 1902 2003 1903 2234 1904 2155 1905 1876 1906 214  

E quero especificar os níveis , de modo que posso resumir os dados desta forma:

  anos nb1 1901-1910 20822 1911-1920 6200  

Também tive dificuldade em fazer isso com grupo, agregação ou codificação até então. Achei uma maneira muito feia de fazer isso, como esta:

  sum (DF $ nb [DF $ year> 1901 & DF $ ano < = 1910])  

Mas gostaria de saber se existe uma maneira mais elegante de fazer isso.

Desculpe se minha pergunta é muito básica, Xavier

Dois respostas:
Chase
2011-08-16 05:37:26 UTC
view on stackexchange narkive permalink

Uma opção é criar uma nova variável para seus bins com cut ou cut2 no pacote Hmisc.

  dat <- data .frame (year = 1901: 2000, value = runif (100)) dat <- transform (dat, bin = cut (year, 10))  

Eu provavelmente usaria plyr para fazer o agrupamento por resumo:

  library (plyr) ddply (dat, "bin", summary, totVal = sum (value))  

A página de ajuda para cut deve ser ilustrativa na definição de rótulos, o que fazer com casos extremos (incluir / excluir valores mínimo ou máximo), etc.

floor ((ano-1900) / 10) produzirá um fator para resumir.
nzcoops
2011-08-16 06:41:16 UTC
view on stackexchange narkive permalink

Chase interessante. Eu não vi a transformação e provavelmente teria feito desta (segunda) maneira:

  set.seed (1234) dat <- data.frame (year = 1901: 2000, value = runif (100)) transformada de <- (dat, bin = cut (ano, 10)) set.seed (1234) dat2 <- data.frame (ano = 1901: 2000, valor = runif (100)) dat2 $ bin < - cut (dat $ year, 10) equal (dat, dat2) # true  

Em seguida, eu olharia para:

  dat2 $ bin <- cut (dat $ year, 10, labels = F) # isso dá a você 1:10 como rótulos em vez dos muito confusos 'intervalos' agregados (valor ~ bin, dados = dat2, soma) > agregado (valor ~ bin, dados = dat2, soma) valor bin 1 1 4,8922642 2 4,5463373 3 4,1652174 4 4,7335855 5 5,1366256 6 4,5304207 7 3,6160028 8 3,8646759 9 4,93653610 10 3,328065  
verifique `com` e` dentro` para primos para `transformar`. plyr adiciona `sumarizar` à mistura também.


Estas perguntas e respostas foram traduzidas automaticamente do idioma inglês.O conteúdo original está disponível em stackexchange, que agradecemos pela licença cc by-sa 3.0 sob a qual é distribuído.
Loading...