2011-12-13 55 views
0

我希望有人能够帮助以下,因为我认为它很简单,但我正在努力。引用函数中的列

我有两个dataframes(以下简化):

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 

有可能在这些dataframes的大约10万行。

我想每列的数据帧中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,])) 
}) 

的问题是在line

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)) 
+1

如果您将dataframe1转换为具有1和0的矩阵,则可以使用矩阵乘法。 – Henry

+1

如果您输入()一些示例数据,将会有所帮助。由于列标题中有空格,因此我无法读取数据(“剪贴板”)。另外,在你想要的结果中,行名没有空格。 – vaettchen

+0

@Henry我理解如何将数据帧转换为1和0的矩阵,但我最终会遇到与引用列相同的问题,因为我需要(dataframe 2 * dataframe 1 $ column1)等的总和 – user1071558

回答

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 
+0

感谢这个例子,这给了我需要的答案。 – user1071558