2011-12-13 19 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