我希望有人可以提供以下帮助,因为我认为这很简单,但我正在努力解决这个问题。
我有两个数据帧(简化如下):
dataframe 1
Area 1 Area 2 Area 3 Area 4
Yes No No No
Yes No No Yes
No Yes Yes No etc
dataframe 2
rep 1 rep 2 rep 3 etc
0.1 0.2 0.3
0.2 0.1 0.4
0.5 0.6 0.8
每个数据框中可以有大约100,000行。
我希望数据帧2中每列的总和乘以数据帧1中等于“是”的行。理想情况下,我希望最终得到
Area 1 Area 2 Area 3 Area 4
rep1 0.3 0.5 0.5 0.2
rep2 0.3 0.6 0.6 0.1
rep3 0.7 0.8 0.8 0.4
等
我有以下代码,它为我提供了正确的数据框输出,但colSums为零,因为我不确定如何正确引用列以对行进行子集化:
extractedsums<-apply(dataframe1, 2, function(i){
df<-dataframe1$i=="Yes"
i<-colSums(data.frame(dataframe2=dataframe2[df,]))
})
问题出在
行 df<-dataframe1$i=="Yes"
因为它没有正确引用dataframe1列。
我已经尝试过正确的方法来正确引用该列,但是我无法理解文献以找出解决方案。
如果有人能指出我正确的方向如何纠正这个或更有效的方式来完成上述我会非常感激。
由于
我不知道如何使用dput,但以下内容应该生成示例代码
Area1<-c("Yes", "Yes", "No", "No")
Area2<-c("No","Yes", "Yes", "No")
Area3<-c("No", "No","Yes", "Yes")
Area4<-c("No","Yes","No","Yes")
dataframe1<-data.frame(cbind(Area1, Area2, Area3, Area4))
rep1<-c(1:3)
rep2<-c(4:6)
rep3<-c(2:4)
dataframe2<-data.frame(cbind(rep1, rep2, rep3))
答案 0 :(得分:1)
作为我的评论的一个例子,矩阵乘法会这样做:
> areas <- matrix(c(1,1,0, 0,0,1, 0,0,1, 0,1,0), nrow=3)
> reps <- matrix(c(0.1,0.2,0.5, 0.2,0.1,0.6, 0.3,0.4,0.8), nrow=3)
>
> t(reps) %*% areas
[,1] [,2] [,3] [,4]
[1,] 0.3 0.5 0.5 0.2
[2,] 0.3 0.6 0.6 0.1
[3,] 0.7 0.8 0.8 0.4