Hola, He estado dándole vueltas a un problema, probando varios loops pero no consigo resolverlo (todavía soy muy novato) Tengo dos data.frames: > head (data) Posit cr 553192 1 643315 1 659754 1 697944 1 1260095 1 1566960 1 553176 2 643315 2 .... > head (rwind) ssc Bin position1 position2 1 0 342481 1166552 1 1 1166552 2010349 1 2 2010349 3008501 1 3 3008501 4022389 1 4 4022389 5008585 1 5 5008585 6010365 2 0 442481 1106552 2 1 1106552 2110354 ..... Necesito que cuando el valor de la columna data$Posit >= rwind$position1 & data$Posit < rwind$position2 & rwind$ssc == data$cr se genere una columna data$bin con el valor correcto rwind$Bin. El resultado debería ser algo así: Posit cr bin 553192 1 0 643315 1 0 659754 1 0 697944 1 0 1260095 1 1 1566960 1 1 Estaría muy agradecido si me dierais alguna idea para resolverlo. Un saludo, Juanma.
Hola, ¿qué tal? Te recomendaría que construyeses una función que dados Posit y cr de data, 1) recorriese rwind buscando las filas que cumplen la condición 2) devolviese el valor adecuado. Luego correría esa función sobre las filas de data (con apply). En esencia, trata de resolver el problema sólo para una fila de data. Cuando lo tengas, mete tu solución en una función y córrela sobre todas las filas. Un saludo, Carlos J. Gil Bellosta http://www.datanalytics.com El día 29 de octubre de 2012 00:34, Juan Manuel Herrero <jmherrero en um.es> escribió:> Hola, > He estado dándole vueltas a un problema, probando varios loops pero no > consigo resolverlo (todavía soy muy novato) > > Tengo dos data.frames: > >> head (data) > Posit cr > 553192 1 > 643315 1 > 659754 1 > 697944 1 > 1260095 1 > 1566960 1 > 553176 2 > 643315 2 > .... > >> head (rwind) > ssc Bin position1 position2 > 1 0 342481 1166552 > 1 1 1166552 2010349 > 1 2 2010349 3008501 > 1 3 3008501 4022389 > 1 4 4022389 5008585 > 1 5 5008585 6010365 > 2 0 442481 1106552 > 2 1 1106552 2110354 > ..... > > Necesito que cuando el valor de la columna data$Posit >= rwind$position1 & > data$Posit < rwind$position2 & rwind$ssc == data$cr > se genere una columna data$bin con el valor correcto rwind$Bin. > > El resultado debería ser algo así: > > Posit cr bin > 553192 1 0 > 643315 1 0 > 659754 1 0 > 697944 1 0 > 1260095 1 1 > 1566960 1 1 > > Estaría muy agradecido si me dierais alguna idea para resolverlo. > > Un saludo, > Juanma. > > _______________________________________________ > R-help-es mailing list > R-help-es en r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es
Hola, Con un par de bucles anidados también funcionaría. Utilizando tus propios datos: ############################## Lines <- "Posit cr 553192 1 643315 1 659754 1 697944 1 1260095 1 1566960 1 553176 2 643315 2 " t.data<-textConnection(Lines) data<-read.table(t.data, header=T, as.is=T) close(t.data) Lines <- "ssc Bin position1 position2 1 0 342481 1166552 1 1 1166552 2010349 1 2 2010349 3008501 1 3 3008501 4022389 1 4 4022389 5008585 1 5 5008585 6010365 2 0 442481 1106552 2 1 1106552 2110354 " t.rwind<-textConnection(Lines) rwind<-read.table(t.data, header=T, as.is=T) close(t.rwind) for(i in 1:dim(data)[1]) { for(j in 1:dim(rwind)[1]) { if( data[i,1] > rwind[j,3] | data[i,1] == rwind[j,3] & data[i,1] < rwind[j,4] & rwind[j,1] == data[i,2] ) { data$bin[i] = rwind[j,2]} else next } } ############################################> dataPosit cr bin 1 553192 1 0 2 643315 1 0 3 659754 1 0 4 697944 1 0 5 1260095 1 1 6 1566960 1 1 7 553176 2 0 8 643315 2 0 Saludos, Carlos Ortega www.qualityexcellence.es El 29 de octubre de 2012 00:34, Juan Manuel Herrero <jmherrero@um.es>escribió:> Hola, > He estado dándole vueltas a un problema, probando varios loops pero no > consigo resolverlo (todavía soy muy novato) > > Tengo dos data.frames: > > > head (data) > Posit cr > 553192 1 > 643315 1 > 659754 1 > 697944 1 > 1260095 1 > 1566960 1 > 553176 2 > 643315 2 > .... > > > head (rwind) > ssc Bin position1 position2 > 1 0 342481 1166552 > 1 1 1166552 2010349 > 1 2 2010349 3008501 > 1 3 3008501 4022389 > 1 4 4022389 5008585 > 1 5 5008585 6010365 > 2 0 442481 1106552 > 2 1 1106552 2110354 > ..... > > Necesito que cuando el valor de la columna data$Posit >= rwind$position1 & > data$Posit < rwind$position2 & rwind$ssc == data$cr > se genere una columna data$bin con el valor correcto rwind$Bin. > > El resultado debería ser algo así: > > Posit cr bin > 553192 1 0 > 643315 1 0 > 659754 1 0 > 697944 1 0 > 1260095 1 1 > 1566960 1 1 > > Estaría muy agradecido si me dierais alguna idea para resolverlo. > > Un saludo, > Juanma. > > ______________________________**_________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/**listinfo/r-help-es<https://stat.ethz.ch/mailman/listinfo/r-help-es> >-- Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]]