Sie können die to_long
Funktion aus dem sjmisc-package für diesen Zweck verwenden. Diese Funktion ist eine komfortable For-Schleife, die mehrere Anrufe gather()
aufruft.
# create sample
mydat <- data.frame(age = c(20, 30, 40),
sex = c("Female", "Male", "Male"),
score_t1 = c(30, 35, 32),
score_t2 = c(33, 34, 37),
score_t3 = c(36, 35, 38),
speed_t1 = c(2, 3, 1),
speed_t2 = c(3, 4, 5),
speed_t3 = c(1, 8, 6))
# check tidyr. score is gathered, however, speed is not
tidyr::gather(mydat, "time", "score", score_t1, score_t2, score_t3)
> age sex speed_t1 speed_t2 speed_t3 time score
> 1 20 Female 2 3 1 score_t1 30
> 2 30 Male 3 4 8 score_t1 35
> 3 40 Male 1 5 6 score_t1 32
> 4 20 Female 2 3 1 score_t2 33
> 5 30 Male 3 4 8 score_t2 34
> 6 40 Male 1 5 6 score_t2 37
> 7 20 Female 2 3 1 score_t3 36
> 8 30 Male 3 4 8 score_t3 35
> 9 40 Male 1 5 6 score_t3 38
# gather multiple columns. both time and speed are gathered.
to_long(mydat, "time", c("score", "speed"),
c("score_t1", "score_t2", "score_t3"),
c("speed_t1", "speed_t2", "speed_t3"))
> age sex time score speed
> (dbl) (fctr) (chr) (dbl) (dbl)
> 1 20 Female score_t1 30 2
> 2 30 Male score_t1 35 3
> 3 40 Male score_t1 32 1
> 4 20 Female score_t2 33 3
> 5 30 Male score_t2 34 4
> 6 40 Male score_t2 37 5
> 7 20 Female score_t3 36 1
> 8 30 Male score_t3 35 8
> 9 40 Male score_t3 38 6
In diesem Fall wird der time
Vektor (unter Angabe der versammelten Gruppen) dauert nur eine der mehreren versammelten Spaltennamen. Wenn dies zu verwirrend ist, können Sie auch die Nummer nur den ID-Variable:
to_long(mydat, "time", c("score", "speed"),
c("score_t1", "score_t2", "score_t3"),
c("speed_t1", "speed_t2", "speed_t3"),
recode.key = TRUE)
> age sex time score speed
> (dbl) (fctr) (dbl) (dbl) (dbl)
> 1 20 Female 1 30 2
> 2 30 Male 1 35 3
> 3 40 Male 1 32 1
> 4 20 Female 2 33 3
> 5 30 Male 2 34 4
> 6 40 Male 2 37 5
> 7 20 Female 3 36 1
> 8 30 Male 3 35 8
> 9 40 Male 3 38 6
?to_long
Beispiele für mehr sehen.
Ich bin nicht sicher, aber ich denke, dass ich etwas auf GitHub zu lesen, dass „mehrere Spalte gathering“ auch für tidyr some geplant ...
Bitte ein reproduzierbares Beispiel produzieren. Die Funktion 'gather()' gehört nicht zur Basis R. Aus welchem Paket kommt sie? Hängen Sie Spalten an, um einen data.frame dreimal so lang zu machen, oder fügen Sie die Spalten zusammen ein? Ohne weitere Informationen wird es schwierig sein, Ihnen zu helfen. – lmo
Wenn Sie die SE-Version 'gather_' verwenden, können Sie über die Spaltennamen iterieren, die Sie als Strings übergeben können. – alistaire
Sammeln Sie mehrere Sätze von Spalten mit Tidyr http://StackOverflow.com/q/25925556/5249203 Haben Sie dies überprüft? Adressiert es nicht Ihr ähnliches Problem? Mögliches Duplikat? – user5249203