【发布时间】:2016-05-20 17:00:51
【问题描述】:
我已经升级了这个循环,(我以前的帖子)How to create a for loop in R for this peculiar calculation
但是,这次我想将循环应用于不同的列。
鉴于这些不同的数据帧 df(A) (nrow=10,ncol=5) , df(B) (nrow=3,ncol=2), df(C)(nrow=4, ncol=2), df(D) (nrow=6 ,ncol=1)
df(A) df(B) df(C) df(D)
col1 col2 col3 col4 col5 col1 col2 col3 col4 col5
1 2 4 4 2 1 4 5 4 5
3 5 7 2 1 2 7 7 5 6
5 7 6 6 3 3 9 8 7 1
6 9 5.9 8 6 8 9 4
9 11 8 4 9 8
4.5 5.5 7.9 6 7.3 10
21 6.7 13.6 8.7 2
3.5 5 6 6 6
6 7.9 1 9 7
67 4 2 2 6
我想:
- 将
df(A)中各列的值与对应列的df(B)、df(C)和df(D)的值相乘(见df列的名称) - 然后从每一行开始对三个、四个或六个连续结果求和。
让我举个例子:
A[1,1]*B[1,1] + A[2,1]*B[2,1] + A[3,1]*B[3,1]= 1*1+3*2+5*3= 22 # first expected result
A[2,1]*B[1,1] + A[3,1]*B[2,1] + A[4,1]*B[3,1]= 3*1+5*2+6*3 = 31 # second expected result
...........
A[8,1]*B[1,1] + A[9,1]*B[2,1] + A[10,1]*B[3,1]= 3.5*1+6*2+67*3 = 216.5 # last expected result
以此类推,从df(A) 的前两列的每个值开始(直到最后一个可能的三元组),对于df(B)。依次将df(A)的col3和col4对df(C)的col3和col4求和为4个值,直到最后4个相加,像这样:
`A[1,3]*C[1,1]+A[2,3]*C[2,1]+A[3,3]*C[3,1]+A[4,3]*C[4,1]= 4*5+7*7+6*8+5.9*8= 164.2 first expected result
A[2,3]*C[1,1]+A[3,3]*C[2,1]+A[4,3]*C[3,1]+A[5,3]*C[4,1]= second expected result
A[7,3]*C[1,1]+A[8,3]*C[2,1]+A[9,3]*C[3,1]+A[10,3]*C[4,1]= last expected result
df(A) 的 col3 和 col4 分别对应df(C) 的 col 3 和 4。
最后是df(D) 的df(A) 的col5,直到可以添加的最后6 个可能的值
A[1,5]*D[1,1]+A[2,5]*D[2,1]+A[3,5]*D[3,1]+A[4,5]*D[4,1]+A[5,5]*D[5,1]+A[6,5]*D[6,1]= 2*5+1*6+3*1+6*4+9*8+7.3*10= first result
A[2,5]*D[1,1]+A[3,5]*D[2,1]+A[4,5]*D[3,1]+A[5,5]*D[4,1]+A[6,5]*D[5,1]+A[7,5]*D[6,1]= second result
A[5,5]*D[1,1]+A[6,5]*D[2,1]+A[7,5]*D[3,1]+A[8,5]*D[4,1]+A[9,5]*D[5,1]+A[10,5]*D[6,1]= last expected result
预期结果是一个包含 5 列的数据框,行数取决于 df B C 和 D 的哪一列乘以 df(A) 的相应列。因此,预期的df 的行数可以等于df(A)col5 对df(C) 的最后一次操作,总共5 行。
我尝试了这个 for 循环代码:
for (i in 1:dim(A)[1]){
for (j in 1:dim(A)[2]){
if(j <=2){
results[i,j] <-colSums(A[i:(i+2),1:2]* B)
}
if(j >=3 & j<=4){
results[i,j] <- colSums(A[i:(i+3),3:4]* C)
}
if(j>4){
results[i,j] <- colSums(A[i:(i+5),5]* D)
}
}
}
但 R 回复
Error in results[i, j] <- colSums(A[i:(i + 2), 1:2] * B) :
number of items to replace is not a multiple of replacement length
【问题讨论】:
标签: r loops nested-loops