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" 并将对所选向量的所有元素进行乘积,因此结果等于 7*12*17=1248。我可以连续做

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

但无法想出将其应用于所有data.frame的方法。有什么帮助吗?

4

1 回答 1

0

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

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
于 2020-06-10T23:18:05.483 回答