Hola a todos. Estoy atascado en un sitio que no me he encontrado antes, debe ser fácil y rápido, a ver si alguien me puede ayudar. Puesto fácil, tengo:> aa <- matrix(11:19,3,3) > aa[,1] [,2] [,3] [1,] 11 14 17 [2,] 12 15 18 [3,] 13 16 19 Quiero la fila cuyo primer elemento es 12 y el segundo 15.> aa[aa[,1:2] == (c(12,15)),]Error: (subscript) logical subscript too long ¿Entonces?> aa[aa[,1:2] == t(c(12,15)),]Error in aa[, 1:2] == t(c(12, 15)) : non-conformable arrays Puedo hacer, claro,> aa[aa[,1]==12 & aa[,2]==15,][1] 12 15 18 Pero necesito algo más "elegante" ya que la selección es sobre bastantes más columnas. Gracias de antemano y un saludo. -- Ignacio Ramos Álvarez i.ramos.alvarez@gmail.com [[alternative HTML version deleted]]
Hola Ignacio, A veces pasa que uno no recuerda ni lo más elemental. Hace poco volví de dos semanas de vacaciones y no me acordaba el número de mi propio teléfono móvil! ¿Es esto lo que estás buscando?> aa[2,]Saludos, José -----Original Message----- From: r-help-es-bounces@r-project.org on behalf of Ignacio Ramos Alvarez Sent: Fri 08/10/2010 11:00 To: r-help-es@r-project.org Subject: [R-es] Selección de observaciones Hola a todos. Estoy atascado en un sitio que no me he encontrado antes, debe ser fácil y rápido, a ver si alguien me puede ayudar. Puesto fácil, tengo:> aa <- matrix(11:19,3,3) > aa[,1] [,2] [,3] [1,] 11 14 17 [2,] 12 15 18 [3,] 13 16 19 Quiero la fila cuyo primer elemento es 12 y el segundo 15.> aa[aa[,1:2] == (c(12,15)),]Error: (subscript) logical subscript too long ¿Entonces?> aa[aa[,1:2] == t(c(12,15)),]Error in aa[, 1:2] == t(c(12, 15)) : non-conformable arrays Puedo hacer, claro,> aa[aa[,1]==12 & aa[,2]==15,][1] 12 15 18 Pero necesito algo más "elegante" ya que la selección es sobre bastantes más columnas. Gracias de antemano y un saludo. -- Ignacio Ramos Álvarez i.ramos.alvarez@gmail.com [[alternative HTML version deleted]] [[alternative HTML version deleted]]
Hola José, gracias por tu rápida respuesta, pero lo que necesito es algo más complejo y genérico, diría que necesito selección condicional sobre varias columnas a la vez sin encadenar varios operadores lógicos. Saludos.> > El 8 de octubre de 2010 12:23, Jose Iparraguirre D''Elia <Jose@erini.ac.uk>escribió: > > >> Hola Ignacio, >> >> A veces pasa que uno no recuerda ni lo más elemental. Hace poco volví de >> dos semanas de vacaciones y no me acordaba el número de mi propio teléfono >> móvil! >> ¿Es esto lo que estás buscando? >> >> > aa[2,] >> >> Saludos, >> >> José >> >> >> -----Original Message----- >> From: r-help-es-bounces@r-project.org on behalf of Ignacio Ramos Alvarez >> Sent: Fri 08/10/2010 11:00 >> To: r-help-es@r-project.org >> Subject: [R-es] Selección de observaciones >> >> Hola a todos. >> Estoy atascado en un sitio que no me he encontrado antes, debe ser fácil y >> rápido, a ver si alguien me puede ayudar. >> >> Puesto fácil, tengo: >> >> > aa <- matrix(11:19,3,3) >> > aa >> [,1] [,2] [,3] >> [1,] 11 14 17 >> [2,] 12 15 18 >> [3,] 13 16 19 >> >> Quiero la fila cuyo primer elemento es 12 y el segundo 15. >> >> > aa[aa[,1:2] == (c(12,15)),] >> Error: (subscript) logical subscript too long >> >> ¿Entonces? >> >> > aa[aa[,1:2] == t(c(12,15)),] >> Error in aa[, 1:2] == t(c(12, 15)) : non-conformable arrays >> >> Puedo hacer, claro, >> > aa[aa[,1]==12 & aa[,2]==15,] >> [1] 12 15 18 >> >> Pero necesito algo más "elegante" ya que la selección es sobre bastantes >> más >> columnas. >> >> Gracias de antemano y un saludo. >> >> >> -- >> Ignacio Ramos Álvarez >> i.ramos.alvarez@gmail.com >> >> [[alternative HTML version deleted]] >> >> >> > >[[alternative HTML version deleted]]
Hola Ignacio, ¿NEcesitas que algun elemento del vecto de numeros está en la fila o que estén todos los elementos del vector? El 8 de octubre de 2010 12:45, Ignacio Ramos Alvarez < i.ramos.alvarez@gmail.com> escribió:> Hola José, gracias por tu rápida respuesta, pero lo que necesito es algo > más > complejo y genérico, diría que necesito selección condicional sobre varias > columnas a la vez sin encadenar varios operadores lógicos. > > Saludos. > > > > > > > El 8 de octubre de 2010 12:23, Jose Iparraguirre D''Elia < > Jose@erini.ac.uk>escribió: > > > > > >> Hola Ignacio, > >> > >> A veces pasa que uno no recuerda ni lo más elemental. Hace poco volví de > >> dos semanas de vacaciones y no me acordaba el número de mi propio > teléfono > >> móvil! > >> ¿Es esto lo que estás buscando? > >> > >> > aa[2,] > >> > >> Saludos, > >> > >> José > >> > >> > >> -----Original Message----- > >> From: r-help-es-bounces@r-project.org on behalf of Ignacio Ramos > Alvarez > >> Sent: Fri 08/10/2010 11:00 > >> To: r-help-es@r-project.org > >> Subject: [R-es] Selección de observaciones > >> > >> Hola a todos. > >> Estoy atascado en un sitio que no me he encontrado antes, debe ser fácil > y > >> rápido, a ver si alguien me puede ayudar. > >> > >> Puesto fácil, tengo: > >> > >> > aa <- matrix(11:19,3,3) > >> > aa > >> [,1] [,2] [,3] > >> [1,] 11 14 17 > >> [2,] 12 15 18 > >> [3,] 13 16 19 > >> > >> Quiero la fila cuyo primer elemento es 12 y el segundo 15. > >> > >> > aa[aa[,1:2] == (c(12,15)),] > >> Error: (subscript) logical subscript too long > >> > >> ¿Entonces? > >> > >> > aa[aa[,1:2] == t(c(12,15)),] > >> Error in aa[, 1:2] == t(c(12, 15)) : non-conformable arrays > >> > >> Puedo hacer, claro, > >> > aa[aa[,1]==12 & aa[,2]==15,] > >> [1] 12 15 18 > >> > >> Pero necesito algo más "elegante" ya que la selección es sobre bastantes > >> más > >> columnas. > >> > >> Gracias de antemano y un saludo. > >> > >> > >> -- > >> Ignacio Ramos Álvarez > >> i.ramos.alvarez@gmail.com > >> > >> [[alternative HTML version deleted]] > >> > >> > >> > > > > > > [[alternative HTML version deleted]] > > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es > >-- Patricia García González r-es.org/ [[alternative HTML version deleted]]
HOla, Si necesitas que todos los elementos del vector x estén en esa fila puedes hacer: aa <- matrix(11:19,3,3) x <- c(12, 18) foo <- function( y )all( x %in% y ) aa[ apply( aa, 1, foo ),] Te sirve esto? Un saludo Patricia El 8 de octubre de 2010 12:53, Usuario R <r.user.spain@gmail.com> escribió:> Hola Ignacio, > > ¿NEcesitas que algun elemento del vecto de numeros está en la fila o que > estén todos los elementos del vector? > > El 8 de octubre de 2010 12:45, Ignacio Ramos Alvarez < > i.ramos.alvarez@gmail.com> escribió: > >> Hola José, gracias por tu rápida respuesta, pero lo que necesito es algo >> más >> complejo y genérico, diría que necesito selección condicional sobre varias >> columnas a la vez sin encadenar varios operadores lógicos. >> >> Saludos. >> >> >> >> > >> > El 8 de octubre de 2010 12:23, Jose Iparraguirre D''Elia < >> Jose@erini.ac.uk>escribió: >> > >> > >> >> Hola Ignacio, >> >> >> >> A veces pasa que uno no recuerda ni lo más elemental. Hace poco volví >> de >> >> dos semanas de vacaciones y no me acordaba el número de mi propio >> teléfono >> >> móvil! >> >> ¿Es esto lo que estás buscando? >> >> >> >> > aa[2,] >> >> >> >> Saludos, >> >> >> >> José >> >> >> >> >> >> -----Original Message----- >> >> From: r-help-es-bounces@r-project.org on behalf of Ignacio Ramos >> Alvarez >> >> Sent: Fri 08/10/2010 11:00 >> >> To: r-help-es@r-project.org >> >> Subject: [R-es] Selección de observaciones >> >> >> >> Hola a todos. >> >> Estoy atascado en un sitio que no me he encontrado antes, debe ser >> fácil y >> >> rápido, a ver si alguien me puede ayudar. >> >> >> >> Puesto fácil, tengo: >> >> >> >> > aa <- matrix(11:19,3,3) >> >> > aa >> >> [,1] [,2] [,3] >> >> [1,] 11 14 17 >> >> [2,] 12 15 18 >> >> [3,] 13 16 19 >> >> >> >> Quiero la fila cuyo primer elemento es 12 y el segundo 15. >> >> >> >> > aa[aa[,1:2] == (c(12,15)),] >> >> Error: (subscript) logical subscript too long >> >> >> >> ¿Entonces? >> >> >> >> > aa[aa[,1:2] == t(c(12,15)),] >> >> Error in aa[, 1:2] == t(c(12, 15)) : non-conformable arrays >> >> >> >> Puedo hacer, claro, >> >> > aa[aa[,1]==12 & aa[,2]==15,] >> >> [1] 12 15 18 >> >> >> >> Pero necesito algo más "elegante" ya que la selección es sobre >> bastantes >> >> más >> >> columnas. >> >> >> >> Gracias de antemano y un saludo. >> >> >> >> >> >> -- >> >> Ignacio Ramos Álvarez >> >> i.ramos.alvarez@gmail.com >> >> >> >> [[alternative HTML version deleted]] >> >> >> >> >> >> >> > >> > >> >> [[alternative HTML version deleted]] >> >> >> _______________________________________________ >> R-help-es mailing list >> >> R-help-es@r-project.org >> https://stat.ethz.ch/mailman/listinfo/r-help-es >> >> > > > -- > Patricia García González > r-es.org/ >-- Patricia García González r-es.org/ [[alternative HTML version deleted]]
Hola Ignacio, no sé si existe una solución más elegante que la que propones. Para seleccionar sobre varias columnas debes comparar en varias columnas. Lo único que se me ocurre es que crees una función que te lo haga más elegante. Por ejemplo:> aa <- matrix(11:19,3,3) > > > # aa: matriz de datos > # colu: el Ãndice de columnas a comparar > # dato: valores a comparar > > selec <- function(aa,colu,dato){+ for(i in 1:length(colu)) + {aa <- subset(aa,aa[,colu[i]]==dato[i])} + aa + }> > selec(aa,c(1,2),c(12,15))[,1] [,2] [,3] [1,] 12 15 18> selec(aa,c(1,2,3),c(13,16,19))[,1] [,2] [,3] [1,] 13 16 19 ¿Es algo asÃ? Jorge El Friday 08 October 2010 12:00:17 Ignacio Ramos Alvarez escribió:> Hola a todos. > Estoy atascado en un sitio que no me he encontrado antes, debe ser fácil y > rápido, a ver si alguien me puede ayudar. > > Puesto fácil, tengo: > > aa <- matrix(11:19,3,3) > > aa > > [,1] [,2] [,3] > [1,] 11 14 17 > [2,] 12 15 18 > [3,] 13 16 19 > > Quiero la fila cuyo primer elemento es 12 y el segundo 15. > > > aa[aa[,1:2] == (c(12,15)),] > > Error: (subscript) logical subscript too long > > ¿Entonces? > > > aa[aa[,1:2] == t(c(12,15)),] > > Error in aa[, 1:2] == t(c(12, 15)) : non-conformable arrays > > Puedo hacer, claro, > > > aa[aa[,1]==12 & aa[,2]==15,] > > [1] 12 15 18 > > Pero necesito algo más "elegante" ya que la selección es sobre bastantes > más columnas. > > Gracias de antemano y un saludo.
un poco 'convoluted' pero parece que hace lo que quieres en una linea aa <- matrix(11:19,3,3) k <- c(12,15) cols <- 1:2 aa[which(match(aa[,cols],k,nomatch=0)!=0)[1],] #[1] 12 15 18 HTH R. ____________________________________________________________________________________ Dr. Rubén Roa-Ureta AZTI - Tecnalia / Marine Research Unit Txatxarramendi Ugartea z/g 48395 Sukarrieta (Bizkaia) SPAIN> -----Mensaje original----- > De: r-help-es-bounces en r-project.org > [mailto:r-help-es-bounces en r-project.org] En nombre de Ignacio > Ramos Alvarez > Enviado el: viernes, 08 de octubre de 2010 12:00 > Para: r-help-es en r-project.org > Asunto: [R-es] Selección de observaciones > > Hola a todos. > Estoy atascado en un sitio que no me he encontrado antes, > debe ser fácil y rápido, a ver si alguien me puede ayudar. > > Puesto fácil, tengo: > > > aa <- matrix(11:19,3,3) > > aa > [,1] [,2] [,3] > [1,] 11 14 17 > [2,] 12 15 18 > [3,] 13 16 19 > > Quiero la fila cuyo primer elemento es 12 y el segundo 15. > > > aa[aa[,1:2] == (c(12,15)),] > Error: (subscript) logical subscript too long > > ¿Entonces? > > > aa[aa[,1:2] == t(c(12,15)),] > Error in aa[, 1:2] == t(c(12, 15)) : non-conformable arrays > > Puedo hacer, claro, > > aa[aa[,1]==12 & aa[,2]==15,] > [1] 12 15 18 > > Pero necesito algo más "elegante" ya que la selección es > sobre bastantes más columnas. > > Gracias de antemano y un saludo. > > > -- > Ignacio Ramos Álvarez > i.ramos.alvarez en gmail.com > > [[alternative HTML version deleted]] > >