2016-05-13 74 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

您可以用cast功能,这是一个比较基础R做到这一点:

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以上。

相关问题