简体   繁体   English

从相关矩阵中过滤p值,而不会丢失行名和列名

[英]Filter p-values from correlation matrix w/o losing rownames an colnames

I need to essentially accomplish this , except with a matrix of p-values. 除了使用p值矩阵外,我基本上需要完成此操作 I just don't know how to retain the row and column names: 我只是不知道如何保留行名和列名:

# Makeup dataframe with p-values only
val_1 = as.numeric(c("2.858941e-02", "3.605727e-02"))
val_2 = as.numeric(c("0.09654", "3.482003e-02"))
val_3 = as.numeric(c("3.517555e-02", "0.07965"))
faux.data = data.frame(val_1, val_2, val_3, row.names = c("val_4", "val_5"))

> faux.data
           val_1      val_2      val_3
val_4 0.02858941 0.09654000 0.03517555
val_5 0.03605727 0.03482003 0.07965000


# Filter, but I lose the column an row names
filtered = faux.data[faux.data < 0.05]

> filtered
[1] 0.02858941 0.03605727 0.03482003 0.03517555

The as.data.frame.table function can convert matrices to long-form dataframes: as.data.frame.table函数可以将矩阵转换为长格式的数据帧:

Then you can select with [.data.frame : 然后,您可以使用[.data.frame选择:

tfaux <- as.data.frame.table(data.matrix(faux.data))

tfaux

   Var1  Var2       Freq
1 val_4 val_1 0.02858941
2 val_5 val_1 0.03605727
3 val_4 val_2 0.09654000
4 val_5 val_2 0.03482003
5 val_4 val_3 0.03517555
6 val_5 val_3 0.07965000

tfaux[ tfaux$Freq < 0.05,  ]

   Var1  Var2       Freq
1 val_4 val_1 0.02858941
2 val_5 val_1 0.03605727
4 val_5 val_2 0.03482003
5 val_4 val_3 0.03517555

If you need just as data visualization 如果您只需要数据可视化

faux.data[faux.data < 0.05] <- "" 

Otherwise 除此以外

faux.data[faux.data < 0.05] <- NA

You can also visualize significant p-values by means of heatmaps with your raw data ( see this other SO question ) 您还可以通过带有原始数据的热图来可视化重要的p值( 请参阅另一个SO问题

library(pheatmap)
pheatmap(faux.data, cluster_rows = F, cluster_cols = F,
     color = c("grey80", "deepskyblue4"),
     breaks = c(0, 0.05, 1), cex=1.2)

在此处输入图片说明

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM