2012-07-21 11 views
6

He la siguiente trama de datos:R ahorro de la salida de la tabla() en una trama de datos

id<-c(1,2,3,4,1,1,2,3,4,4,2,2) 
period<-c("first","calib","valid","valid","calib","first","valid","valid","calib","first","calib","valid") 
df<-data.frame(id,period) 

escribiendo

table(df) 

resultados en

period 
id calib first valid 
1  1  2  0 
2  2  0  2 
3  0  0  2 
4  1  1  1 

sin embargo si ahorro como un marco de datos 'df'

df<-data.frame(table(df)) 

el formato de 'df' sería como

id period Freq 
1 1 calib 2 
2 2 calib 1 
3 3 calib 1 
4 4 calib 0 
5 1 first 1 
6 2 first 2 
7 3 first 0 
8 4 first 0 
9 1 valid 0 
10 2 valid 0 
11 3 valid 2 
12 4 valid 3 

cómo puedo evitar esto y cómo puedo guardar la primera salida, ya que es en una trama de datos?

¿Más importante aún hay alguna forma de obtener el mismo resultado usando 'dcast'?

Respuesta

14

¿Esto ayudaría?

> data.frame(unclass(table(df))) 
    calib first valid 
1  1  2  0 
2  2  0  2 
3  0  0  2 
4  1  1  1 
+0

¡Está funcionando bien! gracias – AliCivil

+1

ahora otra pregunta: ¿y si quiero que la columna de id se incluya en el marco de datos resultante? – AliCivil

1

Para elaborar un poco. Cambié los identificadores en el marco de datos de ejemplo de modo que sus identificadores no sean 1: 4, para demostrar que los identificadores son llevados a la tabla y no son una secuencia de recuentos de filas.

id <- c(10,20,30,40,10,10,20,30,40,40,20,20)  
period <- c("first","calib","valid","valid","calib","first","valid","valid","calib","first","calib","valid") 
df <- data.frame(id,period) 

Cree el nuevo data.frame de dos maneras. rengis La respuesta está bien para marcos de datos de 2 columnas que primero tienen la columna de identificación. No funcionará tan bien si su marco de datos tiene más de 2 columnas o si las columnas están en un orden diferente.

alternativa sería especificar las columnas y orden de las columnas de la tabla:

df3 <- data.frame(unclass(table(df$id, df$period))) 

la columna de la id está incluido en el nuevo hoja.de.datos como row.names(df3). Para agregarlo como una nueva columna:

df3$id <- row.names(df3) 
df3 
    calib first valid id 
10  1  2  0 10 
20  2  0  2 20 
30  0  0  2 30 
40  1  1  1 40 
Cuestiones relacionadas