在data.table中替代dcast?

时间:2017-06-04 17:33:33

标签: r

我正在使用以下方法在数据帧中将变量从长格式转换为宽格式。但是,我正在寻找另一种方法,使用另一个包。 非常感谢任何帮助?

subject <- c(1:10, 1:10)
condition <- c(rep(1,10), rep(2,10))
value <- c(1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5)
rating <- c(1, 3, 5, 2, 3, 5, 6, 7, 5, 3, 5, 7, 3, 6, 3, 5, 6, 7, 7, 8)
df <- data.frame(subject, condition, value, rating)

library(data.table)
df_wide <- dcast(setDT(df), subject ~ condition, value.var=c("rating", "value"))

1 个答案:

答案 0 :(得分:1)

我们可以使用tidyverse

library(tidyverse)
df %>% 
     gather(key, val, value:rating) %>% 
     unite(cond, key, condition) %>%
     spread(cond, val)
#     subject rating_1 rating_2 value_1 value_2
#1        1        1        5       1       1
#2        2        3        7       2       2
#3        3        5        3       3       3
#4        4        2        6       4       4
#5        5        3        3       5       5
#6        6        5        5       1       1
#7        7        6        6       2       2
#8        8        7        7       3       3
#9        9        5        7       4       4
#10      10        3        8       5       5