Buenas noches, tengo dos vectores con nombres. El primero es largo, nombreL, y el segundo corto, nombreC. Quiero contar cuantas veces aparece alguno de los nombres del vector corto en el largo. Lo que estoy haciendo es lo siguiente: cuenta <- 0 topL <- length(nombreL) topC <- length(nombreC) for (i in 1:topL) { for (j in 1:topC) { k <- grep(noquote(nombreL[i]),nombreC[j]) if (length(k) > 0){ cuenta <- cuenta + 1 } } ¿Hay alguna forma de vectorizarlo? Saludos, Sebastián.
Buenos dias Sebastian, Puesto que lo que necesitas es el numero de entradas en las que ambos vectores coinciden, podrias explorar las siguientes dos opciones: set.seed(123) x <- rpois(50, 6) x y <- c(1, 3, 7) y # Opcion 1 sum(y %in% x) # Opcion 2 length(intersect(x, y)) Saludos, Jorge Ivan Velez 2010/5/8 Sebastian Kruk <>> Buenas noches, tengo dos vectores con nombres. El primero es largo, > nombreL, y el segundo corto, nombreC. Quiero contar cuantas veces > aparece alguno de los nombres del vector corto en el largo. > > Lo que estoy haciendo es lo siguiente: > > cuenta <- 0 > topL <- length(nombreL) > topC <- length(nombreC) > for (i in 1:topL) { > for (j in 1:topC) { > k <- > grep(noquote(nombreL[i]),nombreC[j]) > if (length(k) > 0){ > > cuenta <- cuenta + 1 > } > } > > ¿Hay alguna forma de vectorizarlo? > > Saludos, > > Sebastián. > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es >[[alternative HTML version deleted]]
Al parecer aqui hay otra solucion: http://r.789695.n4.nabble.com/Count-cases-in-a-list-td2135932.html#a2135932 --JIV 2010/5/8 Jorge Ivan Velez <>> Buenos dias Sebastian, > > Puesto que lo que necesitas es el numero de entradas en las que ambos > vectores coinciden, podrias explorar las siguientes dos opciones: > > set.seed(123) > > x <- rpois(50, 6) > > x > > y <- c(1, 3, 7) > > y > > > # Opcion 1 > > sum(y %in% x) > > > # Opcion 2 > > length(intersect(x, y)) > > Saludos, > Jorge Ivan Velez > > > 2010/5/8 Sebastian Kruk <> > > Buenas noches, tengo dos vectores con nombres. El primero es largo, >> nombreL, y el segundo corto, nombreC. Quiero contar cuantas veces >> aparece alguno de los nombres del vector corto en el largo. >> >> Lo que estoy haciendo es lo siguiente: >> >> cuenta <- 0 >> topL <- length(nombreL) >> topC <- length(nombreC) >> for (i in 1:topL) { >> for (j in 1:topC) { >> k <- >> grep(noquote(nombreL[i]),nombreC[j]) >> if (length(k) > 0){ >> >> cuenta <- cuenta + 1 >> } >> } >> >> ¿Hay alguna forma de vectorizarlo? >> >> Saludos, >> >> Sebastián. >> >> _______________________________________________ >> R-help-es mailing list >> R-help-es@r-project.org >> https://stat.ethz.ch/mailman/listinfo/r-help-es >> > >[[alternative HTML version deleted]]
Buenas noches JIV, la solución que propones no funciona porque los elementos que tengo son tipo "character". Además preciso su posición. Saludos, Sebastián. El día 8 de mayo de 2010 11:25, Jorge Ivan Velez <jorgeivanvelez en gmail.com> escribió:> Buenos dias Sebastian, > Puesto que lo que necesitas es el numero de entradas en las que ambos > vectores coinciden, podrias explorar las siguientes dos opciones: > > set.seed(123) > > x <- rpois(50, 6) > > x > > y <- c(1, 3, 7) > > y > > # Opcion 1 > > sum(y %in% x) > > # Opcion 2 > > length(intersect(x, y)) > > Saludos, > Jorge Ivan Velez > > 2010/5/8 Sebastian Kruk <> >> >> Buenas noches, tengo dos vectores con nombres. El primero es largo, >> nombreL, y el segundo corto, nombreC. Quiero contar cuantas veces >> aparece alguno de los nombres del vector corto en el largo. >> >> Lo que estoy haciendo es lo siguiente: >> >> cuenta <- 0 >> topL <- length(nombreL) >> topC <- length(nombreC) >> for (i in 1:topL) { >> for (j in 1:topC) { >> k <- >> grep(noquote(nombreL[i]),nombreC[j]) >> if (length(k) > 0){ >> >> cuenta <- cuenta + 1 >> } >> } >> >> ¿Hay alguna forma de vectorizarlo? >> >> Saludos, >> >> Sebastián. >> >> _______________________________________________ >> R-help-es mailing list >> R-help-es en r-project.org >> https://stat.ethz.ch/mailman/listinfo/r-help-es > >
Buenas noches Sebastian, 2010/5/10 Sebastian Kruk <>> Buenas noches JIV, la solución que propones no funciona porque los > elementos que tengo son tipo "character". Además preciso su posición. >Quizas estos detalles, en el momento en que enviaste tu mensaje, nos hubiesen permitido ofrecerte una mejor respuesta. --JIV> > Saludos, > > Sebastián. > > > El día 8 de mayo de 2010 11:25, Jorge Ivan Velez > <> escribió: > > Buenos dias Sebastian, > > Puesto que lo que necesitas es el numero de entradas en las que ambos > > vectores coinciden, podrias explorar las siguientes dos opciones: > > > > set.seed(123) > > > > x <- rpois(50, 6) > > > > x > > > > y <- c(1, 3, 7) > > > > y > > > > # Opcion 1 > > > > sum(y %in% x) > > > > # Opcion 2 > > > > length(intersect(x, y)) > > > > Saludos, > > Jorge Ivan Velez > > > > 2010/5/8 Sebastian Kruk <> > >> > >> Buenas noches, tengo dos vectores con nombres. El primero es largo, > >> nombreL, y el segundo corto, nombreC. Quiero contar cuantas veces > >> aparece alguno de los nombres del vector corto en el largo. > >> > >> Lo que estoy haciendo es lo siguiente: > >> > >> cuenta <- 0 > >> topL <- length(nombreL) > >> topC <- length(nombreC) > >> for (i in 1:topL) { > >> for (j in 1:topC) { > >> k <- > >> grep(noquote(nombreL[i]),nombreC[j]) > >> if (length(k) > 0){ > >> > >> cuenta <- cuenta + 1 > >> } > >> } > >> > >> ¿Hay alguna forma de vectorizarlo? > >> > >> Saludos, > >> > >> Sebastián. > >> > >> _______________________________________________ > >> R-help-es mailing list > >> R-help-es@r-project.org > >> https://stat.ethz.ch/mailman/listinfo/r-help-es > > > > >[[alternative HTML version deleted]]
Sebastian Esto deberia funcionar. contar<-function(a,l) {length(grep(a,l))} nlargo=c(''julio'',''carlos'',''raul'',''julio'',''marta'',''marta'',''raul'',''carmen'') ncorto=c(''marta'',''julio'',''raul'',''carmen'') cbind(ncorto,as.vector(lapply(ncorto,contar,nlargo))) Prof. Julio Di Rienzo Estadística y Biometría FCA- U.N. Córdoba IBS CC Member http://sites.google.com/site/juliodirienzo "Biometry, the active pursuit of biological knowledge by quantitative methods." (R.A. Fisher, 1948) 2010/5/8 Jorge Ivan Velez <jorgeivanvelez@gmail.com>> Al parecer aqui hay otra solucion: > > http://r.789695.n4.nabble.com/Count-cases-in-a-list-td2135932.html#a2135932 > > --JIV > > > > 2010/5/8 Jorge Ivan Velez <> > > > Buenos dias Sebastian, > > > > Puesto que lo que necesitas es el numero de entradas en las que ambos > > vectores coinciden, podrias explorar las siguientes dos opciones: > > > > set.seed(123) > > > > x <- rpois(50, 6) > > > > x > > > > y <- c(1, 3, 7) > > > > y > > > > > > # Opcion 1 > > > > sum(y %in% x) > > > > > > # Opcion 2 > > > > length(intersect(x, y)) > > > > Saludos, > > Jorge Ivan Velez > > > > > > 2010/5/8 Sebastian Kruk <> > > > > Buenas noches, tengo dos vectores con nombres. El primero es largo, > >> nombreL, y el segundo corto, nombreC. Quiero contar cuantas veces > >> aparece alguno de los nombres del vector corto en el largo. > >> > >> Lo que estoy haciendo es lo siguiente: > >> > >> cuenta <- 0 > >> topL <- length(nombreL) > >> topC <- length(nombreC) > >> for (i in 1:topL) { > >> for (j in 1:topC) { > >> k <- > >> grep(noquote(nombreL[i]),nombreC[j]) > >> if (length(k) > 0){ > >> > >> cuenta <- cuenta + 1 > >> } > >> } > >> > >> żHay alguna forma de vectorizarlo? > >> > >> Saludos, > >> > >> Sebastián. > >> > >> _______________________________________________ > >> R-help-es mailing list > >> R-help-es@r-project.org > >> https://stat.ethz.ch/mailman/listinfo/r-help-es > >> > > > > > > [[alternative HTML version deleted]] > > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es > >[[alternative HTML version deleted]]