在data.frame中使用t.test,使用其中的类别和特定值

时间:2017-04-28 20:10:01

标签: r

我有以下data.frame(请忽略行号):

row   country  measurement sampleNr Temperature
46    Germany       P      379    28.800
47    Germany       P      380    28.950
48    Germany       P      381    28.850
139   Control       P      181    28.265
140   Control       P      182    28.205
141   Control       P      183    28.095
142   Control       P      382    28.440
143   Control       P      383    28.090
144   Control       P      384    28.265
190   France        P      376    28.965
191   France        P      377    29.000
192   France        P      378    29.030
238   USA           P      190    29.675
239   USA           P      191    29.170
240   USA           P      192    28.725
286   Cyprus        P      373    29.750
287   Cyprus        P      374    29.715
288   Cyprus        P      375    30.295
334   Malta         P      184    28.430
335   Malta         P      185    28.140
336   Malta         P      186    28.575
382   Japan         P      187    29.220
383   Japan         P      188    29.490
384   Japan         P      189    29.240
46    Germany       P      379    28.800
47    Germany       P      380    28.950
48    Germany       P      381    28.850
139   Control       M      181    28.265
140   Control       M      182    28.205
141   Control       M      183    28.095
142   Control       M      382    28.440
143   Control       M      383    28.090
144   Control       M      384    28.265
190   France        M      376    28.965
191   France        M      377    29.000
192   France        M      378    29.030
238   USA           M      190    29.675
239   USA           M      191    29.170
240   USA           M      192    28.725
286   Cyprus        M      373    29.750
287   Cyprus        M      374    29.715
288   Cyprus        M      375    30.295
334   Malta         M      184    28.430
335   Malta         M      185    28.140
336   Malta         M      186    28.575
382   Japan         M      187    29.220
383   Japan         M      188    29.490
384   Japan         M      189    29.240

我想在Control Vs上对每个测量的任何其他国家执行t.test。有没有办法在t.test中使用公式函数来做到这一点?我认为这是不可能的,还有另一种有效的方法吗?

目前我正在使用for循环与哪个(函数)组合迭代测量组和国家(for循环中的for循环)然后获取值(对于控件大多为3,6)把它们放在t.test中。但这效率非常低。

1 个答案:

答案 0 :(得分:0)

我们可以尝试

library(data.table)
dfN <- subset(df, country == "Control")
split(dfN1, dfN1$measurement)
rbindlist(Map(function(x, y) as.data.table(x)[, .(pval = t.test(Temperature, y$Temperature)$p.value) , country], 
       split(dfN1, dfN1$measurement), split(dfN, dfN$measurement)),
          idcol = 'measurement')