[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