2017-06-04 4 views
1

Ich verwende die folgende Methode, um Variablen in einem Dataframe vom langen in das breite Format zu konvertieren. Ich suche jedoch nach einer alternativen Möglichkeit, ein anderes Paket zu verwenden. Jede Hilfe wird sehr geschätzt?Alternative zu dcast in data.table?

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

Um verwenden können, einen Fehlerbericht und/oder eine Version von data.table verwenden, die Sie wissen, stabil zu sein? – Frank

+1

Guter Punkt! Daran habe ich nicht gedacht; aber ich habe Beiträge gesehen, dass andere Leute den gleichen Fehler hatten wie ich, aber ihre Lösungen haben nicht für mich funktioniert ... – Blixten

+1

Wenn Sie über Fehler sprechen, ist es immer gut, diese Fehlermeldungen in Ihre Frage aufzunehmen. Siehe auch: [ask] – Jaap

Antwort

1

Wir 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