Buenas a todos, tenía este problema y no soy capaz de encontrar la solución, aunque me imagino que será una tontería. Mi intención es filtrar un marco de datos pero no por filas sino por columnas partiendo de una lista previa. Por ejemplo el filtro por filas podría ser de este tipo subset(x, x$ID%in%z$ID2==T) así logro facilmente filtrar datos por filas de otro marco de datos. Pero eso mismo quiero hacerlo por columnas. Les paso un ejemplo de lo que quiero hacer: ############### S1=1:10 f3=23:32 s5=11:20 R4=34:43 # El archivo de datos data=data.frame(ID=LETTERS[1:10],S1,f3,s5,R4) # Archivo del cual voy a filtrar filtro=data.frame(Muestra=c("S1","s5"), LoQueSea=c(2,3)) # Como deberia quedar final=data[,-c(2,4)] ###################### Podría hacer un t(data) y filtrarlo como en filas pero usando rownames en vez de una variable, pero el problema es que se tratan de por ejemplo 150 variables por 600000 filas, por lo que intenté pero descarte la opción pues casi se me cuelga la maquina (Ubuntu 13.10, i5, 4G ram). Supongo que habrá una función que estoy pasando por alto pero no he logrado encontrarla. Espero poder haberme explicado. Saludos y gracias de antemano. Fernando
Hola Fernando, No sé si acabo de entender tu problema. No sé si lo que quieres es mostrar las columnas que tengas (o las que no tengas) en un vector con los nombres de las mismas. Si se trata de esto , basta con hacer algo del estilo: data[,!(colnames(data) %in% filtro$Muestra)] ID f3 R4 1 A 23 34 2 B 24 35 3 C 25 36 4 D 26 37 5 E 27 38 6 F 28 39 7 G 29 40 8 H 30 41 9 I 31 42 10 J 32 43 Saludos, Juan Carmona. -----Mensaje original----- De: r-help-es-bounces en r-project.org [mailto:r-help-es-bounces en r-project.org] En nombre de Fernando Macedo Enviado el: viernes, 28 de marzo de 2014 21:20 Para: Lista R Asunto: [R-es] Filtrar columnas a partir de una lista Buenas a todos, tenía este problema y no soy capaz de encontrar la solución, aunque me imagino que será una tontería. Mi intención es filtrar un marco de datos pero no por filas sino por columnas partiendo de una lista previa. Por ejemplo el filtro por filas podría ser de este tipo subset(x, x$ID%in%z$ID2==T) así logro facilmente filtrar datos por filas de otro marco de datos. Pero eso mismo quiero hacerlo por columnas. Les paso un ejemplo de lo que quiero hacer: ############### S1=1:10 f3=23:32 s5=11:20 R4=34:43 # El archivo de datos data=data.frame(ID=LETTERS[1:10],S1,f3,s5,R4) # Archivo del cual voy a filtrar filtro=data.frame(Muestra=c("S1","s5"), LoQueSea=c(2,3)) # Como deberia quedar final=data[,-c(2,4)] ###################### Podría hacer un t(data) y filtrarlo como en filas pero usando rownames en vez de una variable, pero el problema es que se tratan de por ejemplo 150 variables por 600000 filas, por lo que intenté pero descarte la opción pues casi se me cuelga la maquina (Ubuntu 13.10, i5, 4G ram). Supongo que habrá una función que estoy pasando por alto pero no he logrado encontrarla. Espero poder haberme explicado. Saludos y gracias de antemano. Fernando _______________________________________________ R-help-es mailing list R-help-es en r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es
Es exatamente eso lo que buscaba. Nunca se me ocurrio usar el %in% en la parte de las columnas... Muchas gracias! Saludos Fernando El 28/03/14 17:40, Joan Carmona escribió:> Hola Fernando, > > No sé si acabo de entender tu problema. No sé si lo que quieres es mostrar > las columnas que tengas (o las que no tengas) en un vector con los nombres > de las mismas. Si se trata de esto , basta con hacer algo del estilo: > > data[,!(colnames(data) %in% filtro$Muestra)] > > ID f3 R4 > 1 A 23 34 > 2 B 24 35 > 3 C 25 36 > 4 D 26 37 > 5 E 27 38 > 6 F 28 39 > 7 G 29 40 > 8 H 30 41 > 9 I 31 42 > 10 J 32 43 > > Saludos, > Juan Carmona. > > -----Mensaje original----- > De: r-help-es-bounces en r-project.org [mailto:r-help-es-bounces en r-project.org] > En nombre de Fernando Macedo > Enviado el: viernes, 28 de marzo de 2014 21:20 > Para: Lista R > Asunto: [R-es] Filtrar columnas a partir de una lista > > Buenas a todos, tenía este problema y no soy capaz de encontrar la solución, > aunque me imagino que será una tontería. > > Mi intención es filtrar un marco de datos pero no por filas sino por > columnas partiendo de una lista previa. > > Por ejemplo el filtro por filas podría ser de este tipo > > subset(x, x$ID%in%z$ID2==T) > > así logro facilmente filtrar datos por filas de otro marco de datos. > > Pero eso mismo quiero hacerlo por columnas. > > Les paso un ejemplo de lo que quiero hacer: > ############### > > S1=1:10 > f3=23:32 > s5=11:20 > R4=34:43 > # El archivo de datos > data=data.frame(ID=LETTERS[1:10],S1,f3,s5,R4) > > # Archivo del cual voy a filtrar > filtro=data.frame(Muestra=c("S1","s5"), LoQueSea=c(2,3)) > > # Como deberia quedar > final=data[,-c(2,4)] > > ###################### > > Podría hacer un t(data) y filtrarlo como en filas pero usando rownames en > vez de una variable, pero el problema es que se tratan de por ejemplo > 150 variables por 600000 filas, por lo que intenté pero descarte la opción > pues casi se me cuelga la maquina (Ubuntu 13.10, i5, 4G ram). > > Supongo que habrá una función que estoy pasando por alto pero no he logrado > encontrarla. > Espero poder haberme explicado. > Saludos y gracias de antemano. > > Fernando > > _______________________________________________ > R-help-es mailing list > R-help-es en r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es >