对数据帧执行相关性测试,每行进行多次比较

时间:2016-08-22 17:25:14

标签: r pandas statistics

我有一个包含67行和96列的数据框,其中我有重复的行名称,每个行的值从第48列变化,因此我需要为每一行运行相关性测试。这就是我的数据框架的样子,

   Sample   P1  P2  P3  P4  P5  F1  F2  F3  F4  F5
AS1_1   0.474181    0   2.541416    0.931405    3.679168    0.0442751   0.0582329   0.0399943   0.0397949   0.0389702
AS1_2   0.474181    0   2.541416    0.931405    3.679168    0.0648574   0.0733045   0.0599727   0.0542742   0.0795781
AS1_3   0.474181    0   2.541416    0.931405    3.679168    0.0418037   0.0447637   0.0329602   0.0366981   0.0391166
AS1_4   0.474181    0   2.541416    0.931405    3.679168    0.0842857   0.106061    0.0741478   0.0655408   0.0960092
RDA_1   0.426323    0.186972    0.371125    0.353353    0   0.183682    0.236717    0.204065    0.21347 0.158275
RDA_2   0.426323    0.186972    0.371125    0.353353    0   0.762271    0.157697    0.711849    0.773907    0.162249
RDA_3   0.426323    0.186972    0.371125    0.353353    0   0.65933 0.555187    0.716199    0.614248    0.134922
RDA_4   0.426323    0.186972    0.371125    0.353353    0   0.0757848   0.0806026   0.0850364   0.0956196   0.0527733
RDA_5   0.426323    0.186972    0.371125    0.353353    0   0.0505727   0.0709043   0.0481335   0.0389085   0.036532

例如AS1_ *和RDA_ *的行在第5列之前具有相同的值然后它是不同的,我需要找到第一列(P1..P5)5列与第二列之间每行的相关性(F1 ..F5)因为值不同以找到良好的相关性并绘制它。

到目前为止,我已经转换了数据框,我尝试使用R中的以下脚本,但它让我犯了错误,

x=read.table('df',sep='\t',header=T)
x=t(x)


   for(gene in colnames(x))
{

gnamex <- paste0(gene,"_Beta")
gnamey <- paste0(gene,"_FPKM")

plot(x[,gnamex],x[,gnamey],main=paste0(gene,"\ncor= ",round(cor(x[,gnamex],x[,gnamey]), digits=3),"\np< ",round(cor.test(x[,gnamex],x[,gnamey])$p.value,digits=3)),xlab="Beta values",ylab="FPKM")
abline(lm(x[,gnamex]~x[,gnamey]), col="red")
lines(lowess(x[,gnamex],x[,gnamey]), col="blue")

}

但是它引发了我的错误信息。

Error in `[.data.frame`(x, , gnamex) : undefined columns selected

任何帮助或更好的解决方案都会非常棒,蟒蛇和R都值得赞赏

谢谢

1 个答案:

答案 0 :(得分:1)

genes_idx = pd.MultiIndex.from_tuples(df.Sample.str.split('_').values.tolist())

P = df.filter(like='P').set_index(genes_idx)
P

enter image description here

F = df.filter(like='F').set_index(genes_idx)
F

enter image description here

P.T.corrwith(F.T.set_index(P.columns)).unstack()

enter image description here