2017-01-13 57 views
1

我正在计算2个阅读器的301个变量的ICC。结果保存在两个文件中,每个文件有301列。 file1的第一列(reader1 $ Var1)对应于file2的第一列(reader2 $ Var302)。我可以手动执行ICC(请参阅下文),但我需要帮助来使用apply或循环来自动执行此过程。谢谢。R:计算两个数据帧中多个列的ICC

library(irr) 
irr::icc() 
a= data.frame(reader1$Var1) 
b= data.frame(reader2$Var302) 
X= data.frame (a,b) 
function.ICC <- function (X) {irr::icc(X, model =c("oneway"), type = c("consistency"), unit =("single"), r0 = 0, conf.level = 0.95)} 
Results <- function.ICC(X) 
Results[7] 

回答

0

lapplydo.call的组合可以为你的情况做(虽然有相当多的选项)。你不提供数据的样本,所以我想你先做好2个dataframes一前一后的cbind,所以,在这个玩具例子

> X = data.frame(cbind(1:10, 11:20, 21:30, 21:30)) 
> X 
    X1 X2 X3 X4 
1 1 11 21 21 
2 2 12 22 22 
3 3 13 23 23 
4 4 14 24 24 
5 5 15 25 25 
6 6 16 26 26 
7 7 17 27 27 
8 8 18 28 28 
9 9 19 29 29 
10 10 20 30 30 

你想运行X1的icc VS X3和X2与X4。这将是像下面这样,依靠function.ICC为你定义它:

> do.call(cbind, lapply(1:2, function(i) function.ICC(X[,c(i, i+2)]))) 
      [,1]   [,2]   
subjects 10   10   
raters  2    2    
model  "oneway"  "oneway"  
type  "consistency" "consistency" 
unit  "single"  "single"  
icc.name "ICC(1)"  "ICC(1)"  
value  -0.8320611 -0.4634146 
r0   0    0    
Fvalue  0.09166667 0.3666667  
df1  9    9    
df2  10   10   
p.value 0.9993158  0.926668  
conf.level 0.95   0.95   
lbound  -0.9526347 -0.8231069 
ubound  -0.4669701 0.1848105 

因此,对于包含301列的cbind'ed dataframes,omething相似,这应该工作:

do.call(cbind, lapply(1:301, function(i) function.ICC(X[,c(i, i+301)])))