我有两个数据框:df(A
)(nrow = 10,ncol = 2)和df(B)
(nrow = 3,ncol = 2)。
df(A) df(B)
col1 col2 col1 col2
1 2 13 34
3 5 22 56
5 7 30 42
6 9
9 11
4.5 5.5
21 6.7
3.5 5
6 7.9
67 4
在这种模式下,可以将df(A)中的每个值相乘和求和吗? :
实施例:
A[1,1]*B[1,1] + A[1,1]*B[1,2] + A[1,1]*B[1,3]= 1*13+1*22+1*30= 65
A[2,1]*B[1,1] + A[2,1]*B[1,2] + A[2,1]*B[1,3]= 3*13+3*22+3*30 = 195
and so on for all row in A&col1 for B$col1
A $ col2和B $ col2
相同A[1,2]*B[1,1] + A[1,2]*B[1,2] + A[1,2]*B[1,3]= 2*34+2*56+2*42= 264
A[2,2]*B[1,1] + A[2,2]*B[1,2] + A[2,2]*B[1,3]= 5*34+5*56+5*42=660
and so on for all row in A&col2 for B$col2
预期结果为df(C)
,其中包含2列和10行。
我用apply
诱惑,但它适用于整行或整个列。这个例子很简单,但我的真df
是最大的,有10列,超过1000行。
循环for
有可能吗?
我以这种方式用循环for
诱惑:
temp <- rep(NA,3)
my_matrix <- matrix(0,ncol=ncol(A),nrow=nrow(A))
for (i in 1:nrow(A)){
for (j in 1:3){
temp(j) <- A(i+j-1)*B(i+j-1)
}
my_matrix(i) <- sum(temp)
}
但是R回答:Error: could not find function "A"
或
attempt to apply non-function`
提前谢谢。
答案 0 :(得分:1)
我可能完全错了,但我会选择这样的事情:
Grid<-expand.grid(1:5,1:5)
result<-matrix()
for(i in 1:nrow(Grid)){
First<-A[A[,3]==Grid[i,1],1]*B[B[,3]==4-Grid[i,2],1] ### Gets the first column product, and does the "Contrary product" that you mention in comments
Second<-A[A[,3]==Grid[i,1],2]*B[B[,3]==4-Grid[i,2],2] ### Gets the second column product
result<-rbind(result,cbind(First,Second,Grid[i,1],Grid[i,2])) ### Keep track of the values you used for subsetting
}