[R-br] Operação em data.frame com colunas 'numeric'

Henrique Dallazuanna wwwhsd em gmail.com
Sexta Maio 24 19:58:50 BRT 2013


Tente assim:

# Media por ano
dados3 <- aggregate(anom3_4 ~ year, dados, subset = month %in% 9:11, FUN =
mean)

# classificar
with(dados3, cut(anom3_4, c(-Inf, quantile(anom3_4, 1:3/4), Inf), labels =
c("LN", "LN", "EN", "NEU")))



2013/5/24 Thiago V. dos Santos <thi_veloso em yahoo.com.br>

> Dando continuidade ao problema. Agora eu preciso calcular os quantis 25,
> 50 e 75 e em seguida classificar todas as linhas de um data.frame usando
> condições. Vou continuar o exemplo do Rodrigo:
>
> dados <- read.table(text='year month anom3_4
>   1950     1   -1.50
>   1950     2   -1.77
>   1950     3   -0.73
>   1950     4   -0.94
>   1950     5   -1.47
>   1950     6   -0.70
>   1950     7   -0.48
>   1950     8   -0.59
>   1950     9   -1.09
>   1950    10   -0.57
>   1950    11   -1.09
>   1950    12   -0.93
>   1951     1   -1.04
>   1951     2   -0.07
>   1951     3   -0.70
>   1951     4    0.05
>   1951     5   -0.22
>   1951     6    0.04
>   1951     7    0.41
>   1951     8    0.74
>   1951     9    0.38
>   1951    10    0.80
>   1951    11    0.80
>   1951    12    0.72', header=TRUE)
>
> dados2 <- dados[dados$month %in% c(9, 10, 11), ] # Pega só os 3 meses
> dados3 <- with(dados2, aggregate(anom3_4, list(year=year), mean)) # Aplica
> a média por ano
>
> # Encontro os quantis 25, 50 e 75
> p <- c(25,50,75)/100
> q <- quantile(dados3$x, p)
>
> Agora, digamos que eu queria classificar cada linha do data.frame
> comparando-a com os quartis e criar uma nova coluna rotulada de acordo com
> o resultado. As condições são:
>
> Se dados3$x for menor do que o quartil 25, dados3$class receberá LN
> Se dados3$x for maior do que o quartil 75, dados3$class receberá EN
> Se dados3$x for maior ou igual ao quartil 25 E menor ou igual que o
> quartil 75, dados3$class receberá NEU
>
> O código seria algo como:
>
> # Classificar o data.frame dados3
> if (dados3$x<q[1]) dados3$class='LN'
> if (dados3$x>q[3]) dados3$class='EN'
> if (q[1]<=dados3$x & dados3$x<=q[3]) dados3$class='NEU'
>
> Mas ele não funciona. Talvez eu tivesse que aplicar essa condição linha a
> linha do data.frame dados3. Como fazer isso?
>
> Saudações,
>
> --
> Thiago V. dos Santos
> PhD student
> Land and Atmospheric Science
> University of Minnesota
>
> http://www.laas.umn.edu/CurrentStudents/MeettheStudents/ThiagodosSantos/index.htm
> Phone: (612) 323 9898
>   ------------------------------
>  *From:* Rodrigo Coster <rcoster em gmail.com>
> *To:* "r-br em listas.c3sl.ufpr.br" <r-br em listas.c3sl.ufpr.br>
> *Sent:* Friday, May 24, 2013 3:03 PM
> *Subject:* Re: [R-br] Operação em data.frame com colunas 'numeric'
>
> Qual a diferença de ser número ou fator? Os comandos (pelo menos do jeito
> que eu to pensando) são os mesmos.
>
> dados <- read.table(text='year month anom3_4
>   1950     1   -1.50
>   1950     2   -1.77
>   1950     3   -0.73
>   1950     4   -0.94
>   1950     5   -1.47
>   1950     6   -0.70
>   1950     7   -0.48
>   1950     8   -0.59
>   1950     9   -1.09
>   1950    10   -0.57
>   1950    11   -1.09
>   1950    12   -0.93
>   1951     1   -1.04
>   1951     2   -0.07
>   1951     3   -0.70
>   1951     4    0.05
>   1951     5   -0.22
>   1951     6    0.04
>   1951     7    0.41
>   1951     8    0.74
>   1951     9    0.38
>   1951    10    0.80
>   1951    11    0.80
>   1951    12    0.72', header=TRUE)
>
> dados_dois <- dados[dados$month %in% c(9, 10, 11), ] # Pega só os 3 meses
> with(dados_dois, aggregate(anom3_4, list(year=year), mean)) # Aplica a
> média por ano
>
>
> 2013/5/24 Thiago V. dos Santos <thi_veloso em yahoo.com.br>
>
> Olá pessoal,
>
> Estou com uma dúvida bem básica no R. Tenho um data.frame que contem anos
> e meses no formato numérico e gostaria de realizar algumas operações nesse
> DF. Vejam abaixo:
>
>    year month anom3_4
>   1950     1   -1.50
>   1950     2   -1.77
>   1950     3   -0.73
>   1950     4   -0.94
>   1950     5   -1.47
>   1950     6   -0.70
>   1950     7   -0.48
>   1950     8   -0.59
>   1950     9   -1.09
>   1950    10   -0.57
>   1950    11   -1.09
>   1950    12   -0.93
>   1951     1   -1.04
>   1951     2   -0.07
>   1951     3   -0.70
>   1951     4    0.05
>   1951     5   -0.22
>   1951     6    0.04
>   1951     7    0.41
>   1951     8    0.74
>   1951     9    0.38
>   1951    10    0.80
>   1951    11    0.80
>   1951    12    0.72
>
> Gostaria, inicialmente, de manter somente os meses 9, 10 e 11 de cada ano
> (no caso, 1950 e 1951). Em seguida, gostaria de calcular a média da coluna
> anom3_4 em cada ano.
>
> Se as colunas year e month estivessem como factor, seria fácil fazer isso.
> Mas acho que não dá para criar factor a partir de numerics.
>
> Sugestões de linhas mágicas para fazer isso?
>
> Obrigado,
> --
> Thiago V. dos Santos
> PhD student
> Land and Atmospheric Science
> University of Minnesota
>
> http://www.laas.umn.edu/CurrentStudents/MeettheStudents/ThiagodosSantos/index.htm
> Phone: (612) 323 9898
> _______________________________________________
> R-br mailing list
> R-br em listas.c3sl.ufpr.br
> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça
> código mínimo reproduzível.
>
>
>
> _______________________________________________
> R-br mailing list
> R-br em listas.c3sl.ufpr.br
> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça
> código mínimo reproduzível.
>
>
> _______________________________________________
> R-br mailing list
> R-br em listas.c3sl.ufpr.br
> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça
> código mínimo reproduzível.
>



-- 
Henrique Dallazuanna
Curitiba-Paraná-Brasil
25° 25' 40" S 49° 16' 22" O
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20130524/5c9fa2c2/attachment.html>


Mais detalhes sobre a lista de discussão R-br