我有一个带有长列表数据的CSV,如下所示:
Date user_id value
4/1 1 5
4/1 2 3
4/1 3 10
4/2 1 1
4/2 3 7
我希望将其移动到一个数据框中,该数据框只有一列用户ID和每个日期的列。我假设有一种方法可以使用sapply
或lapply
,但我不知道如何处理用户ID并不总是存在于每个日期。
答案 0 :(得分:1)
也许使用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
答案 1 :(得分:0)
这也是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