2017-06-04 57 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