2017-02-15 65 views
0

我有一個數據幀dfu,對於每個id成立(ID屬於一個teamteam有許多ids)其中屬性prop1prop2等的一束是基於觀察到的百分比樣品在過去的一些研究中 - 這被用作未來研究的參考表。現在有來自新實驗的數據給出了一組新的ids。我需要通過使用dfu中的參考數據來查找其中prop1,prop2等以每個team爲基準觀察到的百分比樣本。這可以通過在dfi計算每id出現的次數來完成,然後採取由team .-不是所有的ID在dfu分組可以存在和不存在於dfudfi可以存在一個或多個ID的加權平均。 dfu中不存在的ID可能會從加權平均值中排除,因爲每個屬性值都不存在。申請分佈新的採樣集

dfu <- data.frame(id=1:6, team=c('A',"B","C","A","A","C"), prop1=c(0.8,0.9,0.6,0.5,0.8,0.9), prop2=c(0.2,0.3,.3,.2,.2,.3)) 
> dfu 
    id team prop1 prop2 
    1 A 0.8 0.2 
    2 B 0.9 0.3 
    3 C 0.6 0.3 
    4 A 0.5 0.2 
    5 A 0.8 0.2 
    6 C 0.9 0.3 
> 
> dfi <- data.frame(id=c(2 , 3 , 2 , 1 , 4 , 3 , 7)) 
> dfi 
    id 
    2 
    3 
    2 
    1 
    4 
    3 
    7 

輸出格式如下所示。例如,組Aprop1的值將是(0.8*1 + 0.5*1)/2 = 0.65

team prop1 prop2 
    A    
    B  
    C  

更喜歡base R方法,其他方法歡迎。列數可能很多。

+0

相關的問題在這裏 - http://stackoverflow.com/q/42105259/3206440,可這是一個更具體的例子。 – user3206440

+1

我懷疑你的set.seed(100)不符合數據。 – DJJ

回答

1

我不知道如何與基地R.

隨着data.table它應該是很容易做到這一點。 讓你的data.frames轉換爲data.table。

library(data.table) 

dfu <- data.frame(id=1:6, team=c('A',"B","C","A","A","C"), prop1=c(0.8,0.9,0.6,0.5,0.8,0.9), prop2=c(0.2,0.3,.3,.2,.2,.3)) 

dfi <- data.frame(id=c(2 , 3 , 2 , 1 , 4 , 3 , 7)) 
dfi <- data.table(dfi) 
dfu <- data.table(dfu) 

然後將它們合併喜歡

dfu[dfi,on="id"] 

## > dfu[dfi,on="id"]     
## id team prop1 prop2 
## 1: 2 B 0.9 0.3 
## 2: 3 C 0.6 0.3 
## 3: 2 B 0.9 0.3 
## 4: 1 A 0.8 0.2 
## 5: 4 A 0.5 0.2 
## 6: 3 C 0.6 0.3 
## 7: 7 NA NA NA 

那麼,我們就必須組進行平均。事實上,我們可以給它一個襯墊像

dfu[dfi,on="id"][,mean(prop1),team] 

## > dfu[dfi,on="id"][,mean(prop1),team] 
## team V1 
## 1: B 0.90 
## 2: C 0.60 
## 3: A 0.65 
## 4: NA NA 

您可以通過合併data.frame和使用功能aggregate我想實現基礎R同樣的事情。

1

從@ DJJ的回答中得到提示。

dfu <- data.frame(id=1:6, team=c('A',"B","C","A","A","C"), 
      prop1=c(0.8,0.9,0.6,0.5,0.8,0.9), 
      prop2=c(0.2,0.3,.3,.2,.2,.3)) 
dfi <- data.frame(id=c(2 , 3 , 2 , 1 , 4 , 3 , 7)) 

合併由ID

> dfx <- merge(dfi, dfu, by="id") 
> dfx 
    id team prop1 prop2 
1 1 A 0.8 0.2 
2 2 B 0.9 0.3 
3 2 B 0.9 0.3 
4 3 C 0.6 0.3 
5 3 C 0.6 0.3 
6 4 A 0.5 0.2 

總結prop1prop2通過teammean

> aggregate(cbind(prop1, prop2) ~ team, dfx, mean) 
    team prop1 prop2 
1 A 0.65 0.2 
2 B 0.90 0.3 
3 C 0.60 0.3