将行乘积有条件地赋值给特定列的值

问题描述 投票:0回答:1

我有这种形式的数据集。

a=data.frame(A=1:5,B=1:5,matrix(seq(50),nrow = 5))
colnames(a)<-c("A","B", paste0(1:10))
    A   B   1   2   3   4   5   6   7   8   9   10
    1   1   1   6   11  16  21  26  31  36  41  46
    2   2   2   7   12  17  22  27  32  37  42  47
    3   3   3   8   13  18  23  28  33  38  43  48
    4   4   4   9   14  19  24  29  34  39  44  49
    5   5   5   10  15  20  25  30  35  40  45  50

我打算使用apply以便有条件地将行的乘积与A和B的值相乘。以第2行为例,我们有A = 2和B = 2,那么代码将寻找column = “ 2”和column =“ 2 + 2”并将求出所选向量的所有元素的乘积,因此Result等于7 * 12 * 17 = 1248。我可以连续做一次

prod(a[1,match(a$A[1],colnames(a)):match(a$A[1]+a$B[1],colnames(a))])

但无法找到将其应用于所有data.frame的方法。有帮助吗?

r
1个回答
0
投票

[这里是apply的一个选项,将MARGIN指定为1以遍历行,从前两个元素创建match列名的索引(A,'B), create a sequence (), subset the values of 'x' and get the产品`

apply(a, 1, function(x) {
       i1 <- match(x[1], names(x))
       i2 <- match(x[1] + x[2], names(x))
        prod(x[i1:i2])
    })
#[1]          6       1428     150696   17535024 2362500000
© www.soinside.com 2019 - 2024. All rights reserved.