
Edimeire, bom dia! Não sei se exatamente isso que você precisa, mas vou arriscar um palpite... ### <code r> require(dplyr) head(mtcars) df0 <- cbind(mtcars[,-c(10,8,2)], mtcars[,c(10,8,2)]); head(df0) # ordena pra facilitar df0$cyl.lag <- NA; head(df0) # Alternativa 1 ============================================================== # g1 <- split(df0, df0$gear); g1 # separa com split g2 <- lapply(g1, function(x) x[order(x$vs, x$cyl),]); g2 # ordena ### lead em g2 lapply(1:3, function(x) g2[[x]]$cyl.lag[g2[[x]]$vs==1] <<- lead(g2[[x]]$cyl[g2[[x]]$vs==1], 2)) # retorna data.frame df1 <- do.call(rbind, g2) df1[with(df1, which(vs==1 & cyl.lag==4)),] # mpg disp hp drat wt qsec am carb gear vs cyl cyl.lag # 4.Datsun 710 22.8 108.0 93 3.85 2.320 18.61 1 1 4 1 4 4 # 4.Merc 240D 24.4 146.7 62 3.69 3.190 20.00 0 2 4 1 4 4 # 4.Merc 230 22.8 140.8 95 3.92 3.150 22.90 0 2 4 1 4 4 # 4.Fiat 128 32.4 78.7 66 4.08 2.200 19.47 1 1 4 1 4 4 # 4.Honda Civic 30.4 75.7 52 4.93 1.615 18.52 1 2 4 1 4 4 # 4.Toyota Corolla 33.9 71.1 65 4.22 1.835 19.90 1 1 4 1 4 4 # Alternativa 2 ============================================================== # df2 <- with(df0, df0[order(gear, vs, cyl),]); head(df2) df2$cyl.lag <- NA; head(df) for (i in sort(unique(df2$gear))) { sel <- which(df2$gear==i & df2$vs==1) df2$cyl.lag[sel] <- lead(df2$cyl[sel], 2) } df2[with(df2, which(vs==1 & cyl.lag==4)),] # mpg disp hp drat wt qsec am carb gear vs cyl cyl.lag # Datsun 710 22.8 108.0 93 3.85 2.320 18.61 1 1 4 1 4 4 # Merc 240D 24.4 146.7 62 3.69 3.190 20.00 0 2 4 1 4 4 # Merc 230 22.8 140.8 95 3.92 3.150 22.90 0 2 4 1 4 4 # Fiat 128 32.4 78.7 66 4.08 2.200 19.47 1 1 4 1 4 4 # Honda Civic 30.4 75.7 52 4.93 1.615 18.52 1 2 4 1 4 4 # Toyota Corolla 33.9 71.1 65 4.22 1.835 19.90 1 1 4 1 4 4 ### </code> ================================================ Éder Comunello Researcher at Brazilian Agricultural Research Corporation (Embrapa) DSc in Agricultural Systems Engineering (USP/Esalq) MSc in Environ. Sciences (UEM), Agronomist (UEM) --- Embrapa Agropecuária Oeste, Dourados, MS, Brazil |<O>| ================================================ GEO, -22.2752, -54.8182, 408m UTC-04:00 / DST: UTC-03:00 Em 15 de junho de 2016 09:26, Edimeire Alexandra Pinto via R-br < r-br@listas.c3sl.ufpr.br> escreveu:
OI pessoal. Estou com uma base de dados imensa que quase estoura a memória do R e por isso, para facilitar o entendimento de minha pergunta, suponha que a base de dados seja a mtcars que existe no próprio R. Segue um pedaço dela abaixo.
mtcars mpg cyl disp hp drat wt qsec vs am gear carb Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2 Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4
Como faço para agrupar a variável gear em grupos 3, depois de 4, etc, conforme a ordenação das variáveis cyl ( em 4,6,8,..) e VS ( em 0,1), ou seja, criar grupo da variável gear=3 onde a variáveis cyl e VS estejam ordenadas, depois criar grupo da variável gear=4 com variáveis cyl e VS ordenadas, e assim por adiante....quero todos em uma mesma base de dados, ou seja, mesmo data frame.
Peço isso a vocês, pois meu objetivo final é pegar variáveis sempre que na linha i se tenha VS=1 e na linha i+2 cyl=2 com gear=4, e assim sucessivamente, ou seja, para cada grupo obtido para gear, intercruzar, VS=1 na linha i e cyl=2 na linha i+2. Tentei usar o pacote dylpr e usar depois os comandos: selecao<-arrange(mtcars, cyl,VS,mpg, disp, hp,drat,wt,qsec,am,gear,carb) g<-group_by(selecao, cyl,vs,gear) conj<-filter(select(g,mpg,vs,cyl,gear), (vs==1 & lead(cyl,2)==4) | gear==4)
Mas ele não separou por grupos, pois ao usar lead (lags para frente) ele não fica restrito a cada grupo da variável formado com a gear, ou seja, o R desconsidera os grupos formados e não limita os “lags” para frente em apenas os grupos formados.
Gente, se alguém puder ajudar, agradeço muito.
_______________________________________________ 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.