使用公共重复列重新排列多列数据框

时间:2017-10-21 09:12:45

标签: r dataframe

我有一个包含四列X1,X2,X3和Y的数据框.Y值对每行中的所有X值都是通用的。我想重新排列数据框,使其具有单个X列(包含所有三个X值列),并在第二列中显示相应的Y值。最终目标是能够绘制X,Y,然后使用适当的模型回归Y~X。

以下是使用

的示例
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)

这就是它的样子

    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

这就是我想要的样子

 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

我看了here,但没有重复的常见列,就像我的“y”列一样。

3 个答案:

答案 0 :(得分:1)

<强>予。使用rbind()cbind()功能

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。使用stack()功能

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

答案 1 :(得分:1)

您可以使用gather和来自tidyr的{​​{1}}以及来自select的{​​{1}}:

dplyr

答案 2 :(得分: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