Quiero crear un gráfico circular a partir del número de ocurrencias en una columna de marco de datos. Sin embargo, hay 5 palabras que quiero eliminar antes de hacer el gráfico circular. Tengo un marco de datos y puedo eliminar estas filas usando algo como:

subset(df, tag != "rubbish")

Sin embargo, si luego trazo usando

pie(table(df$tag)

La basura todavía aparece en el gráfico circular, pero con cero instancias.

table(df$tag) antes del subconjunto me da algo como:

tag1  3
tag2  7
rubbish 9

Y después:

tag1  3
tag2  7
rubbish 0

¿Hay alguna forma de eliminar la basura por completo sin que table () devuelva cero? Probé table(df$tag, exclude="rubbish") pero hay más de una etiqueta que quiero eliminar.

4
ds10 20 mar. 2012 a las 14:32

1 respuesta

La mejor respuesta

Creo que el problema es que df$tag es un factor o variable categórica. Eliminar una determinada categoría del factor no cambia los niveles asociados con el factor. table itera sobre los niveles asociados con el factor. Incluso si el nivel está vacío, table hace esto, por lo tanto rubbish 0. La solución es volver a crear el factor después de eliminar la etiqueta:

subset(df, tag != "rubbish")
levels(df$tag)
df$tag = factor(df$tag)
levels(df$tag)
table(df$tag)

Creo que esto debería resolver tu problema.

5
Paul Hiemstra 20 mar. 2012 a las 14:47
¡Perfecto! La solución es excelente, pero gracias adicionales por explicar el problema.
 – 
ds10
20 mar. 2012 a las 15:24
Gracias también por eso Ben. Vale la pena conocer ambas versiones, ya que hacer las cosas a lo largo del camino a menudo me ayuda a comprender lo que está sucediendo. Lento en aprender R ... pero estoy llegando :)
 – 
ds10
20 mar. 2012 a las 19:53