2012-07-21 18 views
6

I mają następujące ramki danych:R oszczędność wyjście tabeli() do ramki danych

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) 

typowania

table(df) 

skutkuje

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

Jeśli jednak zapisać to jako ramka danych "df"

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

format „df” byłoby jak

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 

jak mogę tego uniknąć i jak mogę zapisać pierwsze wyjście, jak to jest w ramce danych?

Co ważniejsze jest jakiś sposób uzyskania tego samego wyniku za pomocą "dcast"?

Odpowiedz

14

Czy ta pomoc?

> 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

Działa dobrze! dziękuje – AliCivil

+1

teraz inne pytanie: co jeśli chcę, aby kolumna id została uwzględniona w wynikowej ramce danych? – AliCivil

1

Opracowanie tylko trochę. Zmieniłem numery identyfikacyjne w przykładowym pliku data.frame tak, aby twoje identyfikatory nie były 1: 4, aby udowodnić, że id są przenoszone do tabeli i nie są ciągiem wierszy.

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) 

Utwórz nowy plik data.frame na jeden z dwóch sposobów. rengis Odpowiedź jest odpowiednia dla ramek danych 2-kolumnowych, które mają najpierw kolumnę id. Nie będzie działać tak dobrze, jeśli ramka danych ma więcej niż 2 kolumny lub jeśli kolumny są w innej kolejności.

alternatywą byłoby określenie kolumn i kolejność kolumn do tabeli:

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

kolumna id jest zawarte w nowym data.frame jako row.names(df3). Aby dodać go jako nową kolumnę:

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 
Powiązane problemy