Foro de debate

Eliminar elementos de un dataframe

 
Imagen de José Parés Pérez
Eliminar elementos de un dataframe
de José Parés Pérez - jueves, 19 de enero de 2017, 23:58
 

Hola:

Agradezco la posibilidad de consultar mis dudas en este maravilloso lenguaje. No lo conocía hasta hace sólo un par de semanas y necesito colaborar en trabajo de selección de información trascendente de una bases de datos ya existentes.

En este momento estoy detenido tratando de eliminar de una extensa base de datos todos las filas de participantes  que han ingresado su información al sistema pero han contestado una sola de las dos encuestas que se le han enviado. En otras palabras, debo dejar en la base nueva sólo aquellos que aparecen (estando todos identificados con un sólo código de usuario) dos o más veces. Se deben eliminar los que aún no han aparecido por segunda vez.

He intentado bu y expresiones para dataframes y nada me da el resultado esperado. Estoy abierto a proporcionar información más detallada cuando reciba vuestra respuesta de que me pueden ayudar.

Atte.,

José

Imagen de Manuel Muñoz Márquez
Re: Eliminar elementos de un dataframe
de Manuel Muñoz Márquez - viernes, 20 de enero de 2017, 09:33
 

Buenas:

Para poder ayudarte mejor sería conveniente que proporcionaras algún ejemplo de datos o código reproducible.

Si no te he entendido mal, el siguiente procedimiento hace lo que quieres.

Voy a crear un data frame para ilustrar el procedimiento

> set.seed(1)
> d <- data.frame(id = sample.int(5, 10, replace = TRUE), var1 = sample.int(20, 10), var2 = sample.int(20, 10))
> d
   id var1 var2
1   2    5   19
2   2    4    5
3   3   13   12
4   5    7    3
5   2   18   20
6   5    8    6
7   5   11    1
8   4   16   16
9   4   20   11
10  1    9    4

Contamos el número de veces que aparece cada id y nos quedamos con los que aparecen una vez

> t <- table(d$id)
> index <- names(t)[t == 1]
> index
[1] "1" "3"

Elegimos las filas con esos id

> d[as.character(d$id) %in% index, ]
   id var1 var2
3   3   13   12
10  1    9    4

Un saludo.


Imagen de José Parés Pérez
Re: Eliminar elementos de un dataframe
de José Parés Pérez - viernes, 20 de enero de 2017, 13:18
 

Profesor:

Agradezco su pronta respuesta. Ha sido muy ilustrativo para mi, que me inicio recién en  R. He introducido las modificaciones sugeridas en mi programación y he tenido un avance fabuloso pues he podido informarme del contenido de los vectores t e índex que se han creado satisfactoriamente. Sin embargo, el dataframe equivalente al d suyo no se ve afectado por la expresión para quedarse con lo que esté incluido en índex.


Imagen de José Parés Pérez
Re: Eliminar elementos de un dataframe
de José Parés Pérez - viernes, 20 de enero de 2017, 13:25
 

Profesor:

Complementando la información que yo estoy tratando de manejar, le adjunto lo siguiente de un dataframe disponible.

Las instrucciones equivalentes a las suyas son:

t <- table(db_test3$userId)

index <- names(t) [t != 1]

db_test3[db_test3$userId %in% index, ] 

Hay una leve diferencia en que yo deseo quedarme son lo que se repite.

Gracias

José


 head(db_test3)

    user_testId testId userId result partialA partialB partialC partialD partialE partialF

28           28      3     14    113       20       23       25       27       18     NULL

33           33      3     15    105       33       30       11       10       21     NULL

40           40      3     16    125       25       30       24       27       19     NULL

43           43      3     17    159       33       35       32       30       29     NULL

46           46      3     19    126       27       26       25       24       24     NULL

222         222      3     19    122       25       30       23       24       20     NULL

    partialG           controlDc

28      NULL 2012-02-08 16:43:24

33      NULL 2012-02-08 18:37:53

40      NULL 2012-02-08 23:19:23

43      NULL 2012-02-09 00:47:15

46      NULL 2012-02-09 09:50:48

222     NULL 2012-02-23 21:16:57

Imagen de Manuel Muñoz Márquez
Re: Eliminar elementos de un dataframe
de Manuel Muñoz Márquez - viernes, 20 de enero de 2017, 13:54
 

Buenas:

Lo único que falta es asignar la última expresión al data frame que quieras:

db_test3 <- db_test3[db_test3$userId %in% index, ] 

Un saludo.

Imagen de José Parés Pérez
Re: Eliminar elementos de un dataframe
de José Parés Pérez - viernes, 20 de enero de 2017, 16:10
 

Profesor:

¡Magnífico! No sabe como le agradezco. Ahora puedo seguir adelante con mi trabajo. Claro que en la seguridad que encontraré nuevas dificultades. intentaré resolverlaas solo, sin embargo, como en el caso anterior, ¿ podré recurrir nuevamente a Ud.en el caso que encuentre la forma? Conozco muchos lenguajes para Ordenador, pero este es el más complejo que he intentado conocer.

Muchas gracias.

José