2012-05-24 18 views
10

que tiene una trama de datos de esta manera:
df = data.frame(a=1:3, b=2:4, c=3:5)evitar la conversión automática de una sola columna de vectores

estoy seleccionando las columnas de esa trama de datos usando algo similar a:
df[, c(T, F, T)]

Esto funciona bien como siempre que haya al menos dos columnas para devolver; pero, si hago esto por ejemplo:
df[, c(T, F, F)]

... De repente, solo obtengo un vector en lugar de un data.frame.

Normalmente esto estaría bien (o incluso lo desearía), pero dado que necesito el resultado para ser un data.frame en un momento posterior, esto arruina completamente mis scripts.

¿Hay alguna manera de evitar que R haga esta conversión automática a un vector para selecciones de una sola columna?

+0

tenga cuidado con los atajos 'T' /' F' para 'VERDADERO '/' FALSO' - si alguna vez usa 'T' o' F' como definido por el usuario cosas variables pueden ser muy confusas ... –

Respuesta

18

Este es bastante simple. Añada , drop = FALSE a su subconjunto.

E.g.

df[, c(T, F, F), drop = FALSE]

también funciona para matrices.

1

También sin la coma, es decir, df [c (T, F, F)], devuelve un marco de datos, pero parece que tiene casos en los que el nuevo marco de datos puede tener una o más columnas. Por lo tanto, utilice la opción de soltar arriba de

Cuestiones relacionadas