如何根据R中每个日期的单个值列创建每个特定值的数据框?
问题描述:
数据帧我的格式为:如何根据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
谢谢!
答
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
答
您可以用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
以上。