遍历两个匹配列的表(矩阵)并在R中应用函数

时间:2015-04-25 19:59:46

标签: r statistics

所以我有两个矩阵。让我们为控件和患者命名。每行是一个样本,每列是某种蛋白质的浓度。它看起来像这样:

        V1    V2    V3    V4     V5     V6    V7    V8    V9     V10    V11
sample1  1533.34  9.88  6.82 17.88  70.75 350.07 20.67 13.96 10.17  711.02 114.06
sample2  2311.30 12.74  6.82 17.88  80.71 505.96 34.36 19.66 18.70  863.70 181.43
sample3  1314.83 11.39 18.12 41.26 104.36 278.17 40.25 27.12 41.34 1100.00 160.83

这只是一小部分,我实际上有更多的价值观。我想按列比较这个匹配表。侧面问题,假设数据是正态分布的,在这种情况下使用t检验是否正确?无论如何。我尝试过apply()函数:

apply(controls,2,function(x) t.test(x, patients)$p.value)

我得到了一些结果。但我怀疑是否正确使用了该功能。它是否与两个表中的两列相匹配?或者我错误地使用了它?

编辑哦,是的。这绝对是不正确的。由于第二个表中列的平均值始终保持不变。

3 个答案:

答案 0 :(得分:3)

尝试

 mapply(function(x,y) t.test(x,y)$p.value, 
         as.data.frame(controls), as.data.frame(patients))
 #       V1        V2        V3        V4        V5        V6        V7        V8 
 #0.8481788 1.0000000 0.4605294 1.0000000 0.6436604 1.0000000    1.0000000 1.0000000 
 #       V9       V10       V11 
 #1.0000000 1.0000000 1.0000000 

假设"控制"和#34;患者"是matrix

数据

controls <- structure(c(1253, 2311.3, 1314.83, 9.88, 12.74, 11.39, 
20.8, 
6.82, 18.12, 17.88, 17.88, 41.26, 70.75, 53.5, 104.36, 350.07, 
505.96, 278.17, 20.67, 34.36, 40.25, 13.96, 19.66, 27.12, 10.17, 
18.7, 41.34, 711.02, 863.7, 1100, 114.06, 181.43, 160.83),
.Dim = c(3L, 
11L), .Dimnames = list(c("sample1", "sample2", "sample3"), c("V1", 
"V2", "V3", "V4", "V5", "V6", "V7", "V8", "V9", "V10", "V11")))

patients <- structure(c(1533.34, 2311.3, 1314.83, 9.88, 12.74, 11.39, 
6.82, 
6.82, 18.12, 17.88, 17.88, 41.26, 70.75, 80.71, 104.36, 350.07, 
505.96, 278.17, 20.67, 34.36, 40.25, 13.96, 19.66, 27.12, 10.17, 
18.7, 41.34, 711.02, 863.7, 1100, 114.06, 181.43, 160.83),
.Dim = c(3L, 
11L), .Dimnames = list(c("sample1", "sample2", "sample3"), c("V1", 
"V2", "V3", "V4", "V5", "V6", "V7", "V8", "V9", "V10", "V11")))

答案 1 :(得分:3)

假设&#34;患者&#34;和&#34;控制&#34;是data.frame,请尝试:

results <- dplyr::summarise_each(patients, funs(t.test(., controls$.)$p.value))

答案 2 :(得分:0)

我在解析你的问题时遇到了一些麻烦,但我可能会有一个答案。

如果您正在寻找两个等效矩阵之间的列式匹配率,那么有一种非常简单的方法:

colMeans(controls==patients)

要查找矩阵之间的绝对匹配数:

colSums(controls==patients)