2012-03-14 8 views
0

現在行にあるデータを取り出し、列に変換したいと考えています。ここでの考え方は、x1のすべての値に対して単一の行をdfとし、のデータをユニークなx1x2の組み合わせに基づいて2つの列に分割することです。複数行のデータから列へ

> df 
    x1 x2 x3 
1 A 0 4 
2 A 1 2 
3 B 1 1 
4 C 0 5 
5 C 1 2 
6 D 0 1 
7 D 1 1 
8 E 0 3 

これは、多段階のクリーンアッププロセスを伴うことが、最終的に私はdf_rev次の表のようなものを、取得したいのですが。 B0E1の欠けている組み合わせが0の値に置き換えられていることに注意してください。

> df_rev 
    x1 x3_0 x3_1 
1 A 4 2 
3 B 0 1 
4 C 5 2 
6 D 1 1 
8 E 3 0 

今、私は私の状況にthis answerに合うようにしようとしますが、多くの幸運なしてきました。どんな助けでも大歓迎です。

答えて

3
df=' 
    No x1 x2 x3 
    1 A 0 4 
    2 A 1 2 
    3 B 1 1 
    4 C 0 5 
    5 C 1 2 
    6 D 0 1 
    7 D 1 1 
    8 E 0 3' 

    df=read.table(text=df,header=T) 

    library(reshape) 
    nf = cast(df, x1 ~ x2, value = .(x3)) 
    colnames(nf) = c('x1','x3_0','x3_1') 
    nf[is.na(nf)] <- 0 
nf 
+0

ありがとう! – user1202761

0

はまた、内蔵の「再構築」機能を使用することができます。 subの式は、_という変数名のすべてのインスタンスを.に置き換えます。これは、複数の「時間」がある場合は、すべての新しい変数名を再入力するよりも便利です(ここでは2つだけですが、 ):

df_rev = reshape(df, timevar="x2", idvar="x1", direction="wide") 
names(df_rev) = sub("\\.", "_", names(df_rev)) 
df_rev[is.na(df_rev)] = 0 
df_rev 
関連する問題