2017-11-23 3 views
0

Ich habe einen Datenrahmen, der wie folgt aussieht:Splitting ein Datenrahmen von Spalten und Zeilen in R

P sample sensor1 sensor2 sensor3........sensorP 
a 1   2.45  3.56  2.345   2.33 
a 2   2.37  3.46  2.22   1.98 
a 3   2.78  3.22  1.45   2.67 
a N 

Ich will es so aussehen:

P 1_sensor1 2_sensor1 3_sensor1......N_sensorn1 2_sensor1 2_sensor2  
a 2.45  2.37  2.78       3.56   3.46 

und so weiter ... Also spalten Sie die Sensoren horizontal auf und teilen Sie die Proben innerhalb jedes Horizontes auch auf. Ich kenne es eine reshape2 Lösung - ich kann einfach nicht die Syntax bekommen. Die Sensoren werden unterschiedliche Namen haben und die Probenlänge kann auch variieren ... daher die Nummer

paul.

+0

nicht wirklich, dass ich mehrere Spalten mit mehreren Proben in diesem Beispiel nicht tun geteilt werden soll, dass – PaulBeales

+0

Es tut genau das; Ihre Spalte "P" ist analog zu ihrer Spalte "ID", Ihre Spalte "Sample" ist analog zu "TIME", "Sensor1" zu "X" und "Sensor2" zu "Y". es übersetzt genau das, was du tust. Angenommen, Ihr Datenrahmen heißt "df", versuchen Sie Folgendes: 'dcast (schmelzen (df, id.vars = c (" P "," sample ")), P ~ variable + sample)' - das ist die Lösung zu der verknüpften doppelten Frage - und Sie werden sehen, was ich meine. – duckmayr

+0

OK - ich stehe korrigiert, es hat genau so funktioniert wie ich es gebraucht habe ...! Danke, dass Sie sich die Zeit genommen haben, sich neu zu erklären. – PaulBeales

Antwort

0

Sie können mit tidyverse Paket versuchen. Wie folgt aus:

library(tidyverse) 
data <- data.frame(sample = 1:4, 
       sensor1 = rnorm(4, 2), 
       sensor2 = rnorm(4, 2), 
       sensor3 = rnorm(4, 2), 
       sensor4 = rnorm(4, 2)) 
data %>% 
    gather(sensor, value, sensor1:sensor4) %>% 
    unite(names, sample, sensor) %>% 
    spread(names, value) 

Das Ergebnis ist so etwas wie Sie suchen:

1_sensor1 1_sensor2 1_sensor3 1_sensor4 2_sensor1 2_sensor2 2_sensor3 2_sensor4 
[1] 1.549545 3.166664 0.9557496 2.745318 2.246499 2.597675 3.352947 3.085531 
    3_sensor1 3_sensor2 3_sensor3 3_sensor4 4_sensor1 4_sensor2 4_sensor3 4_sensor4 
[1] 1.879149 3.82827 3.84254 3.052806 1.529147 0.6595416 1.286521 2.302484 
Verwandte Themen