【问题标题】:Forming a Dataframe from two separate Dataframes in R从 R 中的两个单独的数据帧形成一个数据帧
【发布时间】:2021-11-13 15:14:16
【问题描述】:

我有一个包含 7 列的数据框 (Df1),每列是一个变量,用于开发预测线性回归模型。

我的第二个数据框 (Df2) 是一个 TRUE/FALSE 矩阵,包含 Df1 的每个可能的列组合。因此,它有 7 列与我的第一个数据帧 (Df1) 匹配,包含 TRUE 或 FALSE,有 127 行(每列中包含 FALSE 的第 128 行已被删除)。

我想使用 Df1 的原始值创建 127 个数据框,将我的 Df1 的每一列组合考虑在内。

有没有一种方法可以遍历 Df2 的每一行,并在哪里找到“TRUE”,从而根据 Df1 创建一个唯一的 Df。

还有其他解决方案或注意事项吗?

【问题讨论】:

  • 请阅读r标签页顶部的信息。特别是问题应包括使用dput 的可重现输入、预期输出和最佳代码尝试。
  • 请提供足够的代码,以便其他人更好地理解或重现问题。

标签: r dataframe linear-regression


【解决方案1】:

看一个具体的例子总是更好,但听起来我们可以像这样重新创建你的数据结构。

我有一个包含 7 列的数据框 (Df1),每列是一个变量,用于开发预测线性回归模型。

我们可以用这段代码做类似的事情:

set.seed(1)

Df1 <- as.data.frame(sapply(1:7, function(x) rnorm(10, x)))


Df1
#>           V1         V2       V3       V4       V5       V6       V7
#> 1  0.3735462  3.5117812 3.918977 5.358680 4.835476 6.398106 9.401618
#> 2  1.1836433  2.3898432 3.782136 3.897212 4.746638 5.387974 6.960760
#> 3  0.1643714  1.3787594 3.074565 4.387672 5.696963 6.341120 7.689739
#> 4  2.5952808 -0.2146999 1.010648 3.946195 5.556663 4.870637 7.028002
#> 5  1.3295078  3.1249309 3.619826 2.622940 4.311244 7.433024 6.256727
#> 6  0.1795316  1.9550664 2.943871 3.585005 4.292505 7.980400 7.188792
#> 7  1.4874291  1.9838097 2.844204 3.605710 5.364582 5.632779 5.195041
#> 8  1.7383247  2.9438362 1.529248 3.940687 5.768533 4.955865 8.465555
#> 9  1.5757814  2.8212212 2.521850 5.100025 4.887654 6.569720 7.153253
#> 10 0.6946116  2.5939013 3.417942 4.763176 5.881108 5.864945 9.172612

我的第二个数据框 (Df2) 是一个 TRUE/FALSE 矩阵,包含 Df1 的每个可能的列组合。因此,它有 7 列与我的第一个数据帧 (Df1) 匹配,包含 TRUE 或 FALSE,有 127 行(每列中包含 FALSE 的第 128 行已被删除)。

此代码生成Df1 的 7 列的每种可能组合的数据框

Df2 <- as.data.frame(do.call(rbind, lapply(as.raw(0:127), 
                      function(x) (rawToBits(x) == 0)[1:7])))


head(Df2)
#>      V1    V2    V3   V4   V5   V6   V7
#> 1  TRUE  TRUE  TRUE TRUE TRUE TRUE TRUE
#> 2 FALSE  TRUE  TRUE TRUE TRUE TRUE TRUE
#> 3  TRUE FALSE  TRUE TRUE TRUE TRUE TRUE
#> 4 FALSE FALSE  TRUE TRUE TRUE TRUE TRUE
#> 5  TRUE  TRUE FALSE TRUE TRUE TRUE TRUE
#> 6 FALSE  TRUE FALSE TRUE TRUE TRUE TRUE
...

现在假设我有这个权利,解决方案是单行:

result <- apply(Df2, 1, function(i) Df1[i])

现在result 是一个包含 128 个数据框的列表,每个数据框对应于 Df1 中所有可能的列组合(包括位置 128 处的空数据框,用于 all-FALSE 案例)

head(result)
#> [[1]]
#>           V1         V2       V3       V4       V5       V6       V7
#> 1  0.3735462  3.5117812 3.918977 5.358680 4.835476 6.398106 9.401618
#> 2  1.1836433  2.3898432 3.782136 3.897212 4.746638 5.387974 6.960760
#> 3  0.1643714  1.3787594 3.074565 4.387672 5.696963 6.341120 7.689739
#> 4  2.5952808 -0.2146999 1.010648 3.946195 5.556663 4.870637 7.028002
#> 5  1.3295078  3.1249309 3.619826 2.622940 4.311244 7.433024 6.256727
#> 6  0.1795316  1.9550664 2.943871 3.585005 4.292505 7.980400 7.188792
#> 7  1.4874291  1.9838097 2.844204 3.605710 5.364582 5.632779 5.195041
#> 8  1.7383247  2.9438362 1.529248 3.940687 5.768533 4.955865 8.465555
#> 9  1.5757814  2.8212212 2.521850 5.100025 4.887654 6.569720 7.153253
#> 10 0.6946116  2.5939013 3.417942 4.763176 5.881108 5.864945 9.172612
#> 
#> [[2]]
#>            V2       V3       V4       V5       V6       V7
#> 1   3.5117812 3.918977 5.358680 4.835476 6.398106 9.401618
#> 2   2.3898432 3.782136 3.897212 4.746638 5.387974 6.960760
#> 3   1.3787594 3.074565 4.387672 5.696963 6.341120 7.689739
#> 4  -0.2146999 1.010648 3.946195 5.556663 4.870637 7.028002
#> 5   3.1249309 3.619826 2.622940 4.311244 7.433024 6.256727
#> 6   1.9550664 2.943871 3.585005 4.292505 7.980400 7.188792
#> 7   1.9838097 2.844204 3.605710 5.364582 5.632779 5.195041
#> 8   2.9438362 1.529248 3.940687 5.768533 4.955865 8.465555
#> 9   2.8212212 2.521850 5.100025 4.887654 6.569720 7.153253
#> 10  2.5939013 3.417942 4.763176 5.881108 5.864945 9.172612
#> 
#> [[3]]
#>           V1       V3       V4       V5       V6       V7
#> 1  0.3735462 3.918977 5.358680 4.835476 6.398106 9.401618
#> 2  1.1836433 3.782136 3.897212 4.746638 5.387974 6.960760
#> 3  0.1643714 3.074565 4.387672 5.696963 6.341120 7.689739
#> 4  2.5952808 1.010648 3.946195 5.556663 4.870637 7.028002
#> 5  1.3295078 3.619826 2.622940 4.311244 7.433024 6.256727
#> 6  0.1795316 2.943871 3.585005 4.292505 7.980400 7.188792
#> 7  1.4874291 2.844204 3.605710 5.364582 5.632779 5.195041
#> 8  1.7383247 1.529248 3.940687 5.768533 4.955865 8.465555
#> 9  1.5757814 2.521850 5.100025 4.887654 6.569720 7.153253
#> 10 0.6946116 3.417942 4.763176 5.881108 5.864945 9.172612
#> 
#> [[4]]
#>          V3       V4       V5       V6       V7
#> 1  3.918977 5.358680 4.835476 6.398106 9.401618
#> 2  3.782136 3.897212 4.746638 5.387974 6.960760
#> 3  3.074565 4.387672 5.696963 6.341120 7.689739
#> 4  1.010648 3.946195 5.556663 4.870637 7.028002
#> 5  3.619826 2.622940 4.311244 7.433024 6.256727
#> 6  2.943871 3.585005 4.292505 7.980400 7.188792
#> 7  2.844204 3.605710 5.364582 5.632779 5.195041
#> 8  1.529248 3.940687 5.768533 4.955865 8.465555
#> 9  2.521850 5.100025 4.887654 6.569720 7.153253
#> 10 3.417942 4.763176 5.881108 5.864945 9.172612
#> 
#> [[5]]
#>           V1         V2       V4       V5       V6       V7
#> 1  0.3735462  3.5117812 5.358680 4.835476 6.398106 9.401618
#> 2  1.1836433  2.3898432 3.897212 4.746638 5.387974 6.960760
#> 3  0.1643714  1.3787594 4.387672 5.696963 6.341120 7.689739
#> 4  2.5952808 -0.2146999 3.946195 5.556663 4.870637 7.028002
#> 5  1.3295078  3.1249309 2.622940 4.311244 7.433024 6.256727
#> 6  0.1795316  1.9550664 3.585005 4.292505 7.980400 7.188792
#> 7  1.4874291  1.9838097 3.605710 5.364582 5.632779 5.195041
#> 8  1.7383247  2.9438362 3.940687 5.768533 4.955865 8.465555
#> 9  1.5757814  2.8212212 5.100025 4.887654 6.569720 7.153253
#> 10 0.6946116  2.5939013 4.763176 5.881108 5.864945 9.172612
#> 
#> [[6]]
#>            V2       V4       V5       V6       V7
#> 1   3.5117812 5.358680 4.835476 6.398106 9.401618
#> 2   2.3898432 3.897212 4.746638 5.387974 6.960760
#> 3   1.3787594 4.387672 5.696963 6.341120 7.689739
#> 4  -0.2146999 3.946195 5.556663 4.870637 7.028002
#> 5   3.1249309 2.622940 4.311244 7.433024 6.256727
#> 6   1.9550664 3.585005 4.292505 7.980400 7.188792
#> 7   1.9838097 3.605710 5.364582 5.632779 5.195041
#> 8   2.9438362 3.940687 5.768533 4.955865 8.465555
#> 9   2.8212212 5.100025 4.887654 6.569720 7.153253
#> 10  2.5939013 4.763176 5.881108 5.864945 9.172612

#> (etc)

reprex package (v2.0.0) 于 2021 年 11 月 13 日创建

【讨论】:

  • 谢谢艾伦,这很清楚。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-20
相关资源
最近更新 更多