como juntar dois bancos em função de um intervalo

oi pessoal eu normalmente utilizo o merge() para juntar bancos em função de 1 ou mais variáveis que são iguais nos dois bancos. também normalmente tenho bancos com medidas repetidas para cada indivíduo de modo que novas linhas são criadas no ato do merge() em função das informações dos bancos originais. agora preciso juntar dois bancos em função de um intervalo de números (na verdade são datas mas isso não importa): um exemplo do que preciso fazer p o banco original com > 3000 ids seria banco1 tem o id, a entrada, a saída, e o grupo id <- c(1, 1, 1, 2, 2) ent <- c(1, 10, 20, 1, 30) sai <- c(9, 19, 40, 29, 50) grupo <- c(1, 2, 3, 1, 2) banco1 <- cbind(id, ent, sai, grupo) banco2 tem o id, o dia, tipo do teste id <- c(1, 1, 1, 1, 1, 2, 2, 2, 2) dia <- c(5, 8, 12, 18, 25, 22, 25, 29, 41) teste <- c("A", "A", "B", "B", "A", "B", "B", "C", "D") banco2 <- cbind(id, dia, teste) e o banco 3 seria o merge() dos dois em função da avaliação se o DIA do banco2 está contido no intervalo (entre ENT e SAI) do banco1 o resultado seria o banco 3 com 5 linhas para o id1 com as 5 vars da seguinte forma id ent sai grupo dia teste 1 1 9 1 5 A 1 1 9 1 8 A 1 10 19 2 12 B 1 10 19 2 18 B 1 20 40 3 25 A e 4 linhas para o id 2 alguém pode ajudar???? eu li a respeito da função findInterval() mas não consegui fazer funcionar.... agradeço desde já! abraços, paula.

Acho que pode ser isso: banco3 <- merge(banco1,banco2) banco3[banco3$dia>=banco3$ent &banco3$dia<=banco3$sai,] Att Éder Em 12 de junho de 2012 19:06, Paula Mendes Luz <luzpaulamendes@gmail.com>escreveu:
oi pessoal
eu normalmente utilizo o merge() para juntar bancos em função de 1 ou mais variáveis que são iguais nos dois bancos. também normalmente tenho bancos com medidas repetidas para cada indivíduo de modo que novas linhas são criadas no ato do merge() em função das informações dos bancos originais.
agora preciso juntar dois bancos em função de um intervalo de números (na verdade são datas mas isso não importa):
um exemplo do que preciso fazer p o banco original com > 3000 ids seria
banco1 tem o id, a entrada, a saída, e o grupo
id <- c(1, 1, 1, 2, 2) ent <- c(1, 10, 20, 1, 30) sai <- c(9, 19, 40, 29, 50) grupo <- c(1, 2, 3, 1, 2)
banco1 <- cbind(id, ent, sai, grupo)
banco2 tem o id, o dia, tipo do teste
id <- c(1, 1, 1, 1, 1, 2, 2, 2, 2) dia <- c(5, 8, 12, 18, 25, 22, 25, 29, 41) teste <- c("A", "A", "B", "B", "A", "B", "B", "C", "D")
banco2 <- cbind(id, dia, teste)
e o banco 3 seria o merge() dos dois em função da avaliação se o DIA do banco2 está contido no intervalo (entre ENT e SAI) do banco1
o resultado seria o banco 3 com 5 linhas para o id1 com as 5 vars da seguinte forma id ent sai grupo dia teste 1 1 9 1 5 A 1 1 9 1 8 A 1 10 19 2 12 B 1 10 19 2 18 B 1 20 40 3 25 A
e 4 linhas para o id 2
alguém pode ajudar???? eu li a respeito da função findInterval() mas não consegui fazer funcionar....
agradeço desde já! abraços, paula. _______________________________________________ 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.

olá eder agradeço a tentativa mas não funcionou... na verdade nem entendi que o R fez!... se quiser repetir, rodei os comandos abaixo: id <- c(1, 1, 1, 2, 2) ent <- c(1, 10, 20, 1, 30) sai <- c(9, 19, 40, 29, 50) grupo <- c(1, 2, 3, 1, 2) banco1 <- cbind(id, ent, sai, grupo) id <- c(1, 1, 1, 1, 1, 2, 2, 2, 2) dia <- c(5, 8, 12, 18, 25, 22, 25, 29, 41) teste <- c("A", "A", "B", "B", "A", "B", "B", "C", "D") banco2 <- cbind(id, dia, teste) banco3 <- merge(banco1, banco2) banco3$ent<-as.numeric(banco3$ent) banco3$sai<-as.numeric(banco3$sai) banco3$dia<-as.numeric(banco3$dia) banco3[banco3$dia>=banco3$ent & banco3$dia<=banco3$sai,] 2012/6/12 Eder David Borges da Silva <eder@leg.ufpr.br>:
Acho que pode ser isso: banco3 <- merge(banco1,banco2) banco3[banco3$dia>=banco3$ent &banco3$dia<=banco3$sai,] Att Éder
Em 12 de junho de 2012 19:06, Paula Mendes Luz <luzpaulamendes@gmail.com> escreveu:
oi pessoal
eu normalmente utilizo o merge() para juntar bancos em função de 1 ou mais variáveis que são iguais nos dois bancos. também normalmente tenho bancos com medidas repetidas para cada indivíduo de modo que novas linhas são criadas no ato do merge() em função das informações dos bancos originais.
agora preciso juntar dois bancos em função de um intervalo de números (na verdade são datas mas isso não importa):
um exemplo do que preciso fazer p o banco original com > 3000 ids seria
banco1 tem o id, a entrada, a saída, e o grupo
id <- c(1, 1, 1, 2, 2) ent <- c(1, 10, 20, 1, 30) sai <- c(9, 19, 40, 29, 50) grupo <- c(1, 2, 3, 1, 2)
banco1 <- cbind(id, ent, sai, grupo)
banco2 tem o id, o dia, tipo do teste
id <- c(1, 1, 1, 1, 1, 2, 2, 2, 2) dia <- c(5, 8, 12, 18, 25, 22, 25, 29, 41) teste <- c("A", "A", "B", "B", "A", "B", "B", "C", "D")
banco2 <- cbind(id, dia, teste)
e o banco 3 seria o merge() dos dois em função da avaliação se o DIA do banco2 está contido no intervalo (entre ENT e SAI) do banco1
o resultado seria o banco 3 com 5 linhas para o id1 com as 5 vars da seguinte forma id ent sai grupo dia teste 1 1 9 1 5 A 1 1 9 1 8 A 1 10 19 2 12 B 1 10 19 2 18 B 1 20 40 3 25 A
e 4 linhas para o id 2
alguém pode ajudar???? eu li a respeito da função findInterval() mas não consegui fazer funcionar....
agradeço desde já! abraços, paula. _______________________________________________ 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.

Paula, Funciona sim: id <- c(1, 1, 1, 2, 2) ent <- c(1, 10, 20, 1, 30) sai <- c(9, 19, 40, 29, 50) grupo <- c(1, 2, 3, 1, 2) banco1 <- data.frame(id, ent, sai, grupo)##Troque os cbind por data frame id <- c(1, 1, 1, 1, 1, 2, 2, 2, 2) dia <- c(5, 8, 12, 18, 25, 22, 25, 29, 41) teste <- c("A", "A", "B", "B", "A", "B", "B", "C", "D") banco2 <- data.frame(id, dia, teste) banco3 <- merge(banco1, banco2) banco3[banco3$dia>=banco3$ent & banco3$dia<=banco3$sai,] Oque estava fazendo não funcionar era seu cbind, que no banco dois estava convertendo os numeros para factor. Att Em 16 de junho de 2012 18:33, Paula Mendes Luz <luzpaulamendes@gmail.com>escreveu:
olá eder agradeço a tentativa mas não funcionou... na verdade nem entendi que o R fez!... se quiser repetir, rodei os comandos abaixo:
id <- c(1, 1, 1, 2, 2) ent <- c(1, 10, 20, 1, 30) sai <- c(9, 19, 40, 29, 50) grupo <- c(1, 2, 3, 1, 2) banco1 <- cbind(id, ent, sai, grupo)
id <- c(1, 1, 1, 1, 1, 2, 2, 2, 2) dia <- c(5, 8, 12, 18, 25, 22, 25, 29, 41) teste <- c("A", "A", "B", "B", "A", "B", "B", "C", "D") banco2 <- cbind(id, dia, teste)
banco3 <- merge(banco1, banco2) banco3$ent<-as.numeric(banco3$ent) banco3$sai<-as.numeric(banco3$sai) banco3$dia<-as.numeric(banco3$dia) banco3[banco3$dia>=banco3$ent & banco3$dia<=banco3$sai,]
2012/6/12 Eder David Borges da Silva <eder@leg.ufpr.br>:
Acho que pode ser isso: banco3 <- merge(banco1,banco2) banco3[banco3$dia>=banco3$ent &banco3$dia<=banco3$sai,] Att Éder
Em 12 de junho de 2012 19:06, Paula Mendes Luz <luzpaulamendes@gmail.com
escreveu:
oi pessoal
eu normalmente utilizo o merge() para juntar bancos em função de 1 ou mais variáveis que são iguais nos dois bancos. também normalmente tenho bancos com medidas repetidas para cada indivíduo de modo que novas linhas são criadas no ato do merge() em função das informações dos bancos originais.
agora preciso juntar dois bancos em função de um intervalo de números (na verdade são datas mas isso não importa):
um exemplo do que preciso fazer p o banco original com > 3000 ids seria
banco1 tem o id, a entrada, a saída, e o grupo
id <- c(1, 1, 1, 2, 2) ent <- c(1, 10, 20, 1, 30) sai <- c(9, 19, 40, 29, 50) grupo <- c(1, 2, 3, 1, 2)
banco1 <- cbind(id, ent, sai, grupo)
banco2 tem o id, o dia, tipo do teste
id <- c(1, 1, 1, 1, 1, 2, 2, 2, 2) dia <- c(5, 8, 12, 18, 25, 22, 25, 29, 41) teste <- c("A", "A", "B", "B", "A", "B", "B", "C", "D")
banco2 <- cbind(id, dia, teste)
e o banco 3 seria o merge() dos dois em função da avaliação se o DIA do banco2 está contido no intervalo (entre ENT e SAI) do banco1
o resultado seria o banco 3 com 5 linhas para o id1 com as 5 vars da seguinte forma id ent sai grupo dia teste 1 1 9 1 5 A 1 1 9 1 8 A 1 10 19 2 12 B 1 10 19 2 18 B 1 20 40 3 25 A
e 4 linhas para o id 2
alguém pode ajudar???? eu li a respeito da função findInterval() mas não consegui fazer funcionar....
agradeço desde já! abraços, paula. _______________________________________________ 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.

olá eder, de fato, agora funciona. obrigada! 2012/6/16 Eder David Borges da Silva <eder@leg.ufpr.br>:
Paula, Funciona sim: id <- c(1, 1, 1, 2, 2) ent <- c(1, 10, 20, 1, 30) sai <- c(9, 19, 40, 29, 50) grupo <- c(1, 2, 3, 1, 2) banco1 <- data.frame(id, ent, sai, grupo)##Troque os cbind por data frame
id <- c(1, 1, 1, 1, 1, 2, 2, 2, 2) dia <- c(5, 8, 12, 18, 25, 22, 25, 29, 41) teste <- c("A", "A", "B", "B", "A", "B", "B", "C", "D") banco2 <- data.frame(id, dia, teste)
banco3 <- merge(banco1, banco2) banco3[banco3$dia>=banco3$ent & banco3$dia<=banco3$sai,]
Oque estava fazendo não funcionar era seu cbind, que no banco dois estava convertendo os numeros para factor. Att
Em 16 de junho de 2012 18:33, Paula Mendes Luz <luzpaulamendes@gmail.com> escreveu:
olá eder agradeço a tentativa mas não funcionou... na verdade nem entendi que o R fez!... se quiser repetir, rodei os comandos abaixo:
id <- c(1, 1, 1, 2, 2) ent <- c(1, 10, 20, 1, 30) sai <- c(9, 19, 40, 29, 50) grupo <- c(1, 2, 3, 1, 2) banco1 <- cbind(id, ent, sai, grupo)
id <- c(1, 1, 1, 1, 1, 2, 2, 2, 2) dia <- c(5, 8, 12, 18, 25, 22, 25, 29, 41) teste <- c("A", "A", "B", "B", "A", "B", "B", "C", "D") banco2 <- cbind(id, dia, teste)
banco3 <- merge(banco1, banco2) banco3$ent<-as.numeric(banco3$ent) banco3$sai<-as.numeric(banco3$sai) banco3$dia<-as.numeric(banco3$dia) banco3[banco3$dia>=banco3$ent & banco3$dia<=banco3$sai,]
2012/6/12 Eder David Borges da Silva <eder@leg.ufpr.br>:
Acho que pode ser isso: banco3 <- merge(banco1,banco2) banco3[banco3$dia>=banco3$ent &banco3$dia<=banco3$sai,] Att Éder
Em 12 de junho de 2012 19:06, Paula Mendes Luz <luzpaulamendes@gmail.com> escreveu:
oi pessoal
eu normalmente utilizo o merge() para juntar bancos em função de 1 ou mais variáveis que são iguais nos dois bancos. também normalmente tenho bancos com medidas repetidas para cada indivíduo de modo que novas linhas são criadas no ato do merge() em função das informações dos bancos originais.
agora preciso juntar dois bancos em função de um intervalo de números (na verdade são datas mas isso não importa):
um exemplo do que preciso fazer p o banco original com > 3000 ids seria
banco1 tem o id, a entrada, a saída, e o grupo
id <- c(1, 1, 1, 2, 2) ent <- c(1, 10, 20, 1, 30) sai <- c(9, 19, 40, 29, 50) grupo <- c(1, 2, 3, 1, 2)
banco1 <- cbind(id, ent, sai, grupo)
banco2 tem o id, o dia, tipo do teste
id <- c(1, 1, 1, 1, 1, 2, 2, 2, 2) dia <- c(5, 8, 12, 18, 25, 22, 25, 29, 41) teste <- c("A", "A", "B", "B", "A", "B", "B", "C", "D")
banco2 <- cbind(id, dia, teste)
e o banco 3 seria o merge() dos dois em função da avaliação se o DIA do banco2 está contido no intervalo (entre ENT e SAI) do banco1
o resultado seria o banco 3 com 5 linhas para o id1 com as 5 vars da seguinte forma id ent sai grupo dia teste 1 1 9 1 5 A 1 1 9 1 8 A 1 10 19 2 12 B 1 10 19 2 18 B 1 20 40 3 25 A
e 4 linhas para o id 2
alguém pode ajudar???? eu li a respeito da função findInterval() mas não consegui fazer funcionar....
agradeço desde já! abraços, paula. _______________________________________________ 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.
_______________________________________________ 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.
participantes (2)
-
Eder David Borges da Silva
-
Paula Mendes Luz