2016-09-10 5 views
1

値。非固有のIDと値の列(ユニーク可能性がありますがでなくてもかまいません)の列と、次のデータフレームを考えてみましょう:データフレームからユニークIDのカウント数を導出し、カウントのために新しい列を作成し、私はデータフレームのリシェイプ/カウント問題を抱えている

id<-c(1,1,1,2,2,3,4,4,4,4) 
value_df<-c("A","B","C","D","E","F","G","H","I","J") 
df<-data.frame(id,value_df) 

    df 
    id value_df 
1 1  A 
2 1  B 
3 1  C 
4 2  D 
5 2  E 
6 3  F 
7 4  G 
8 4  H 
9 4  I 
10 4  J 

私は何を後にしていますが、最初の列のデータフレームを作成することです一意のidの、これらの第二の数と、各IDの残りのn列の値を、このような含まれています。カウントを導出plyrパッケージを使用して

df_counts_reshape 
    id number_id value_df_1 value_df_2 value_df_3 value_df_4 
1 1   3   A   B   C   N 
2 2   2   D   E   <NA>  <NA> 
3 3   1   F   <NA>  <NA>  <NA> 
4 4   4   G   I   J   K 

すると、この

count(df,"id") 
のように、簡単です

それから私の問題が始まります。私はがreshape2パッケージから dcastとを溶融しようとしたデータフレームの残りの部分を取得するには。

df_melted<-melt(df,id.vars =c("id"), measure.vars = c("value_df")) 
df_cast<-dcast(df_melted,id~value) 

これは、しかし、次の出力の結果は:

df_cast 
    id A B C D E F G H I J 
1 1 A B C <NA> <NA> <NA> <NA> <NA> <NA> <NA> 
2 2 <NA> <NA> <NA> D E <NA> <NA> <NA> <NA> <NA> 
3 3 <NA> <NA> <NA> <NA> <NA> F <NA> <NA> <NA> <NA> 
4 4 <NA> <NA> <NA> <NA> <NA> <NA> G H I J 

この出力は、私が望んだものよりも、より多くの「値」の列を持っているが、私は見つけることができませんし、簡単な方法は、それを簡素化します私は上記の出力をしたい。私はnumber_idを取得する最後のステップがrbindであるとも考えていました。私の実際のデータフレームは、列の数千人と非常に不器用現在メルト/ dcast出力を行う行数千が含まれていると言うために

言うまでもないです。

df<-data.frame(id,value_df) 
df$num <- ave(as.character(df$value_df), df$id, FUN = seq_along) 
df = reshape(df,idvar = "id",direction = "wide",timevar = "num") 

結果:この

答えて

1

使用nはIDのグループごとに:

> df 
    id value_df.1 value_df.2 value_df.3 value_df.4 
1 1   A   B   C  <NA> 
4 2   D   E  <NA>  <NA> 
6 3   F  <NA>  <NA>  <NA> 
7 4   G   H   I   J 

はこれが何をするか、それが1をシーケンス数値列を追加しています。そして、それは新しい列名

+0

感謝として、これらの値を使用して、私は少しの周りにプレーする必要がありますが、それは非常に良いスタートです。それは私のdf $ idは私の大規模なデータセットのために問題を複雑にしているようだvalue_df列の値depsite NAことができることが判明しました。 –

関連する問題