2016-05-13 6 views
1

私が持っているデータフレームのフォーマットは次のとおりです。Rの各日付の値の単一列から特定の値ごとにデータフレームを作成するにはどうすればよいですか?

dates <- c("02/27/92", "02/27/92", "02/28/92", "02/28/92", "02/28/92", "02/29/92", "02/29/92") 

df_Before <- data.frame(Date = as.Date(dates, "%m/%d/%y"), 
      ID = c(1,1,2,2,2,3,3), 
      Var1 = factor(c('d','c','d','b','c','a','b'))) 
> df_Before 
    Date  ID Var1 
1 1992-02-27 1 d 
2 1992-02-27 1 c 
3 1992-02-28 2 d 
4 1992-02-28 2 b 
5 1992-02-28 2 c 
6 1992-02-29 3 a 
7 1992-02-29 3 b 

私はこの形式でデータフレームをしたいと思います:事前に

> df_After  
    Date  ID a b c d 
1 1992-02-27 1 0 0 1 1 
2 1992-02-28 2 0 1 1 1 
3 1992-02-29 3 1 1 0 0 

感謝を!

答えて

1

Reshape2ライブラリーは、このタイプのアプリケーションのためのdcast機能を持っている

library(reshape2) 
dcast(df_Before, Date+ID~Var1, length) 

#  Date ID a b c d 
#1 1992-02-27 1 0 0 1 1 
#2 1992-02-28 2 0 1 1 1 
#3 1992-02-29 3 1 1 0 0 
1
あなたはもう少し基本Rで cast機能、でそれを行うことができます

library(reshape) 

df_Before$values <- 1 # Need to add this one column in order to aggregate. 
df_After <- cast(df_Before, formula = Date + ID ~ Var1, sum, value = "values") 

を与える:

> df_After 
     Date ID a b c d 
1 1992-02-27 1 0 0 1 1 
2 1992-02-28 2 0 1 1 1 
3 1992-02-29 3 1 1 0 0 

気にしないで、他の誰かが上記のdcastでより良いものを投稿しました。

関連する問題