
Obrigado Henrique, Funcionou como uma brisa. Mas uma mensagem de aviso é emitida no final (ver abaixo). É possível evita-la ou não devo me preocupar? ----------------------------------------------------------------------- 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) # Media por ano dados3 <- aggregate(anom3_4 ~ year, dados, subset = month %in% 9:11, FUN = mean) # classificar dados3$class <- with(dados3, cut(anom3_4, c(-Inf, quantile(anom3_4, 1:3/4), Inf), labels = c("LN", "LN", "EN", "NEU"))) Warning message: In `levels<-`(`*tmp*`, value = if (nl == nL) as.character(labels) else paste0(labels, : duplicated levels in factors are deprecated dados3 year anom3_4 class 1 1950 -0.9166667 LN 2 1951 0.6600000 NEU ----------------------------------------------------------------------- Saudações, -- Thiago V. dos Santos PhD student Land and Atmospheric Science University of Minnesota http://www.laas.umn.edu/CurrentStudents/MeettheStudents/ThiagodosSantos/inde... Phone: (612) 323 9898 ________________________________ From: Henrique Dallazuanna <wwwhsd@gmail.com> To: r-br@listas.c3sl.ufpr.br; Thiago V. dos Santos <thi_veloso@yahoo.com.br> Sent: Friday, May 24, 2013 5:58 PM Subject: Re: [R-br] Operação em data.frame com colunas 'numeric' 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@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/inde... Phone: (612) 323 9898
________________________________ From: Rodrigo Coster <rcoster@gmail.com> To: "r-br@listas.c3sl.ufpr.br" <r-br@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@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/inde... Phone: (612) 323 9898 _______________________________________________ R-br mailing list R-br@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@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@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