2010-11-24 271 views
20
names(U1) 

[1] "username"  "review_count" "forum_posts" "age"   "avg_interval" 
[6] "avg_sim"  "class" 

Entonces, ¿cómo creo un marco de datos vacío U1.RN que tendrá las mismas columnas que U1?Crear dataframe vacío en R con las mismas columnas

+4

¿Puedo preguntar por qué necesita un marco de datos de 0 filas? Dependiendo de lo que vayas a hacer con él, puede ser más eficiente hacer las cosas de otra manera (por ejemplo, espero que no estés planeando llenar esta fila por fila en un bucle?) –

+0

"por ejemplo, espero que no estés" ¿Está planeando llenar esta fila por fila en un bucle? " - Sí, :(. ¿Cuál es la forma Ry de hacer el equivalente de [pseudocódigo] para (i en 1: 6000) if (pred.U1.nb.c [i] == 'no etiquetado') U1.RN [j ++ ,] <- U1 [i,] [/ pseudocode], donde pred.U1.nb.c es un vector que obtuve de un predict(), y quiero crear un marco de datos seleccionando las filas de U1 que predicen arrojadas ? (... esforzándose por ser prolijo y no confundir al mismo tiempo) – Tathagata

+6

En R, preasigne su almacenamiento! Sabe que desea un marco de datos de 6.000 filas antes del ciclo, así que cree uno y complételo fila por fila. incluso más rápido: crea una matriz de la dimensión correcta, llena esa fila por fila y luego conviértela en un marco de datos, ya que las matrices son mucho más rápidas para trabajar. Si quieres más ayuda (parece que tal vez ni siquiera necesites un bucle, solo una simple indexación y subconjunto/inserción), ¿puede comenzar una nueva Q y proporcionar un pequeño ejemplo adecuado de lo que realmente quiere hacer? Si lo hace, le prometo mirarlo y darle una oportunidad a una respuesta –

Respuesta

58

Usted puede hacer esto:

U1.RN <- U1[0,] 
+0

Perfecto .....> U1.RN <-U1 [0,] > nombres (U1.RN) [1] "usuario" "review_count" "forum_posts" "edad" "avg_interval" [6] "avg_sim" "clase" > nrow (U1) [1] 6000 > nrow (U1.RN) [1] 0 – Tathagata

+3

1 aseado !!!!!! !! (el extra! era para redondear el límite de caracteres mínimo, oh, espera, ... ;-) –

2

Usando dplyr, hay algunas buenas opciones:

slice(U1, 0) 
filter(U1, FALSE) 
filter(U1, NA) 

El enfoque slice es probablemente más claro.

+1

'filtro (FALSO)' también funciona y es quizás un poco claro de intención. 'slice (0)' podría ser incluso mejor. – Gregor

+0

Estoy de acuerdo en que 'slice (0)' parece ser un ganador en legibilidad/claridad – joemienko

1

En la línea de df [0,] también puede usar una máscara booleana que podría hacer que el código sea más legible: df [FALSE,].

Cuestiones relacionadas