2012-07-21 10 views
6

に、私は、次のデータフレームを持っている:私は保存しかし場合テーブルの出力を保存するR()は、データフレーム

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

table(df) 

を入力

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) 

結果それはデータフレーム 'df'として

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

「DF」の形式はどのように私はこれを回避することができ、それがデータフレームの中にあるとしてどのように私は最初の出力を保存することができます

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 

ようなものでしょうか?

もっと重要なことに、「dcast」を使用して同じ結果を得る方法はありますか?

答えて

14

これは役に立ちますか?

> 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

これはうまくいきます。感謝 – AliCivil

+1

もう一つの質問:結果のデータフレームにid列を含める場合はどうすればよいですか? – AliCivil

1

ほんの少し詳しく説明します。 idがテーブルに連れて行数のシーケンスではないことを証明するために、IDが1:4でないように、data.frameの例のIDを変更しました。

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) 

次の2つの方法のいずれかを作成します。 rengis最初にid列を持つ2列のデータフレームの場合は答えが良いです。データフレームに2つ以上の列がある場合や、列の順序が異なる場合は、うまく機能しません。

代替は、あなたのテーブルの列と列の順序を指定するには、次のようになります。

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

id列はrow.names(df3)として新しいdata.frameに含まれています。新しい列として追加するには

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 
関連する問題