2017-10-21 2 views
0

Ich habe einen Datenrahmen mit vier Spalten, X1, X2, X3 und Y. Der Y-Wert ist gemeinsam für alle X-Werte in jeder Zeile. Ich möchte den Datenrahmen neu anordnen, um eine einzelne X-Spalte (umfassend alle drei X-Wert-Spalten) mit dem entsprechenden Y-Wert in der zweiten Spalte zu haben. Das Endziel besteht darin, X, Y plotten und dann Y ~ X mit einem geeigneten Modell zurückentwickeln zu können.Rearrange mehrere Spalten von Datenrahmen mit gemeinsamen wiederholenden Spalte

Hier ist ein Beispiel mit

x1<-c(1,14,87,126,483,1004) 
x2<-c(18,43,112,364,987,1014) 
x3<-c(4,83,96,125,631,872) 
y<-c(3,54,68,73,135,287) 
df<-data.frame(x1,x2,x3,y) 

zu arbeiten, und hier ist, wie es

x1 x2 x3 y 
1 1 18 4 3 
2 14 43 83 54 
3 87 112 96 68 
4 126 364 125 73 
5 483 987 631 135 
6 1004 1014 872 287 

Hier ist, was aussieht ich es wie

X  Y 
1  3 
14  54 
87  68 
126 73 
483 135 
1004 287 
18  3 
43  54 
112 68 
364 73 
987 135 
1014 287 
4  3 
83  54 
96  68 
125 73 
631 135 
872 287 

Ich habe schauen möchte guckte here aber es gibt keine gemeinsame Spalte, die wiederholt wird, wie mit meiner "y" Spalte.

Antwort

1
# Transform data 
library(reshape2) 
# Melt (group) your table by y column 
df2 <- melt(df, "y") 

# Plot data 
library(ggplot2) 
ggplot(df2, aes(value, y, color = variable)) + 
    geom_line() 

enter image description here

1

I. Mit rbind() und cbind() Funktion

df1 <- data.frame(rbind(cbind(df$x1,df$y), cbind(df$x2, df$y), cbind(df$x2, df$y))) 
names(df1) <- c("X","y") 

OR

df1 <- data.frame(rbind(cbind(X = df$x1,y = df$y), cbind(X=df$x2, y=df$y), cbind(X=df$x2, y=df$y))) 

II. Mit stack() Funktion

df1 <- data.frame(X = stack(df, select = c(x1,x2,x3))[,1], y = df$y) 
1

Sie gather und von tidyr zusammen mit select von dplyr verwenden:

library(dplyr) 
library(tidyr) 

df %>% 
    gather(key = name_x, value = x, - y) %>% 
    select(-name_x) 
Verwandte Themen