我们希望将数据框中的某些列与来自各种不同数据框的匹配列合并。我们的主要数据框预测如下所示:
>predict
x1 x2 x3
1 1 1
0 1 0
1 1 0
1 1 0
0 0 1
(可能会有更多列,具体取决于预测运行的数量)
我们的目标是将此数据框与来自三个不同测试数据框的y列合并( df_1 df_2 和 df_3 )都具有相同的结构。通过df_1$y[test]
访问所需的列([test]是一个逻辑向量,用于标识与我们的x值匹配的5个值),并且与 predict 中的x列具有相同的结构
所需的输出如下所示:
>predict_test
x1 x2 x3 y1 y2 y3
1 1 1 1 1 1
0 1 0 0 0 0
1 1 0 0 1 0
1 1 0 1 1 1
0 0 1 0 0 1
在下一步中,我们需要将x列和y列堆叠到一列中以进行评估。以正确的顺序堆叠它们很重要,即x2下的x2和x2下的x3。分别为y列。
>predict_test_stack
x_all y_all
1 1
0 0
1 0
1 1
0 0
1 1
1 0
1 1
1 1
0 0
1 1
0 0
0 0
0 1
1 1
这可能适用于melt
,但我们不知道如何应用它,同时指出两个不同的id变量。
感谢您的帮助。
答案 0 :(得分:1)
数据强>
df1 <- read.table(text = "x1 x2 x3
1 1 1
0 1 0
1 1 0
1 1 0
0 0 1",stringsAsFactors = FALSE,header=TRUE)
df2 <- read.table(text = "y1 y2 y3
1 1 1
0 0 0
0 1 0
1 1 1
0 0 1",stringsAsFactors = FALSE,header=TRUE)
<强>溶液强>
我们连接data.frames,然后取消列出data.frame
,保持正确的列数。最后,我们通过进入data.frames来设置名称以找到模式。
list1 <- list(df1,df2)
side_by_side <- data.frame(list1)
# x1 x2 x3 y1 y2 y3
# 1 1 1 1 1 1 1
# 2 0 1 0 0 0 0
# 3 1 1 0 0 1 0
# 4 1 1 0 1 1 1
# 5 0 0 1 0 0 1
output <- data.frame(matrix(unlist(side_by_side),ncol = length(list1)))
names(output) <- sapply(list1,function(x){sub("[[:digit:]]","",names(x)[1])})
# x y
# 1 1 1
# 2 0 0
# 3 1 0
# 4 1 1
# 5 0 0
# 6 1 1
# 7 1 0
# 8 1 1
# 9 1 1
# 10 0 0
# 11 1 1
# 12 0 0
# 13 0 0
# 14 0 1
# 15 1 1