我有这种形式的数据集。
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的方法。有帮助吗?
[这里是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