2017-06-04 31 views
1

我正在使用以下方法将数据帧中的变量从长格式转换为宽格式。不过,我正在寻找另一种方法,使用另一种包装。 任何帮助非常感谢?在data.table中替代dcast吗?

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")) 
+2

嗯,提交错误报告和/或使用一个版本data.table的,你知道是稳定的? – Frank

+1

好点!没有想到那个;但我已经看到其他人也有像我一样的错误,但他们的解决方案没有为我工作的帖子... – Blixten

+1

当你在谈论错误时,在你的问题中包含这些错误信息总是很好。另见:[问] – Jaap

回答

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