2017-02-15 38 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