创建从列表数据R的数据帧丢失一些值
问题描述:
我有一个CSV数据的一个长长的清单,看起来像这样:创建从列表数据R的数据帧丢失一些值
Date user_id value
4/1 1 5
4/1 2 3
4/1 3 10
4/2 1 1
4/2 3 7
,我想将它移动到数据帧只有一列用户标识和每个日期的列。我假设有一种方法可以处理sapply
或lapply
,但我不确定如何处理该用户标识并不总是每个日期都存在。
答
也许使用reshape
像下面,它假设你的数据存储在dat
东西:
reshape(dat,v.names = "value",idvar = "user_id",
direction = "wide",timevar = "Date")
user_id value.4/1 value.4/2
1 1 5 1
2 2 3 NA
3 3 10 7
或者更简单地说,使用dcast
从reshape2
:
dcast(dat,user_id~Date)
user_id 4/1 4/2
1 1 5 1
2 2 3 NA
3 3 10 7
答
这也未尝tidyr::spread
的确很方便
require(tidyr)
require(dplyr)
df <- data.frame("Date" = rep(c("Nov", "Dec"), each = 3),
"user.id" = rep(1:3, 2),
"value" = rnorm(6))
df.2 <- df %>%
spread(Date, value)
df.2
user.id Dec Nov
1 -1.9094765 -1.101037
2 0.2358694 -1.418151
3 -0.4297790 -1.426573