【问题标题】:R - create a loop to create many tables by multiplying columns with one columnR - 创建一个循环以通过将列与一列相乘来创建许多表
【发布时间】:2020-11-23 14:51:22
【问题描述】:

我对使用 R 很陌生,我正在尝试创建一个生成许多表的循环。

我有两个表 A(64 列)和 B(147 列),行数相等。我需要将 A 的每一列分别与完整的表 B 相乘 --> 得到 64 个表。所以 A[,1] * B、A[,2] * B、A[,3] * B 等等。

尽管这看起来很简单,但我不知道该怎么做。

【问题讨论】:

    标签: r loops for-loop


    【解决方案1】:

    你可以使用

    results = vector(length = 64, mode = 'list')
    for (i in 1:64) {
        results[[i]] = B[1:nrow(A),]*A[,i]
    }
    

    【讨论】:

    • 重要的是要强调您的答案做得很好,因为您的存储对象足够大,可以包含所有 thre 结果(长度 = 64)。 @Red_24 应该始终这样做,因为如果你不这样做会花费更长的时间!
    • 非常感谢!我相信这行得通。我有一个后续问题,如果你也知道这个问题。有没有办法可以为我得到的 64 张纸分配名称?我将名称存储为向量。
    • names(results) =
    • 最近的发展使代码稍微复杂了一些。事实证明,行数并不相同。仅当索引匹配时,我才需要应用此 loopt。这意味着忽略仅出现在表 B 中而不出现在表 A 中的索引。这可能吗?表 A 有 373 行,表 B 有 564 行。 A 中的所有 373 都与 B 中的 373 对应,但其他 193 应省略。
    • 我已经相应地改变了我之前的答案。
    【解决方案2】:

    您可以将 lapply 用作单行代码。这是一个例子。请注意,lapply 函数将 df1 的每一列乘以 df2:

    m1 <- 1:10
    m2 <- 2 * m1
    m3 <- 3 * m1
    df1 <- data.frame(m1, m2, m3)
    > df1
       m1 m2 m3
    1   1  2  3
    2   2  4  6
    3   3  6  9
    4   4  8 12
    5   5 10 15
    6   6 12 18
    7   7 14 21
    8   8 16 24
    9   9 18 27
    10 10 20 30
    df2 <- df1
    
    dfs <- lapply(df1, function(x) x * df2) # replace df1 and df2 with your dataframes.
    > dfs
    $m1
        m1  m2  m3
    1    1   2   3
    2    4   8  12
    3    9  18  27
    4   16  32  48
    5   25  50  75
    6   36  72 108
    7   49  98 147
    8   64 128 192
    9   81 162 243
    10 100 200 300
    
    $m2
        m1  m2  m3
    1    2   4   6
    2    8  16  24
    3   18  36  54
    4   32  64  96
    5   50 100 150
    6   72 144 216
    7   98 196 294
    8  128 256 384
    9  162 324 486
    10 200 400 600
    
    $m3
        m1  m2  m3
    1    3   6   9
    2   12  24  36
    3   27  54  81
    4   48  96 144
    5   75 150 225
    6  108 216 324
    7  147 294 441
    8  192 384 576
    9  243 486 729
    10 300 600 900
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-11
      • 1970-01-01
      • 2022-07-12
      • 1970-01-01
      • 1970-01-01
      • 2020-08-06
      相关资源
      最近更新 更多