R - 如何 select 特定值

R - How to select specific values

我在医疗保健行业工作,需要有关如何使用 R 的帮助。 我解释一下:我有一组这样的数据:

S1      S2      S3      S4      S5
0.498   1.48    1.43    0.536   0.548
2.03    1.7     3.74    2.13    2.02
0.272   0.242   0.989   0.534   0.787
0.986   2.03    2.53    1.65    2.31
0.307   0.934   0.633   0.36    0.281
0.78    0.76    0.706   0.81    1.11
0.829   2.03    0.667   1.48    1.42
0.497   1.27    0.952   1.23    1.73
0.553   0.286   0.513   0.422   0.573

这是我的目标:

Do correlation between every column
Calculate p-values
Calculate R-squared
Only show when R2>0.5 and p-values <0.05 

到目前为止,这是我的代码(它不是最有效的,但可以工作):

> e<-read.table(‘Workbook8nm.csv’, header=TRUE, sep=“,”, dec=“.”, na.strings=“NA”)
> f<-data.frame(e)
> M<-cor(f, use=“complete”) #Do the correlation like I want
> library(‘psych’)
> N<-corr.test (f) #Give me p-values

所以,到目前为止,我在 M 中有相关性,在 N 中有 p 值。 我需要有关如何显示 R2 的帮助?

第二部分如何让 R 仅在 R2>0.5 和 p 值<0.05 时显示?我用了这一行:

P<-M[which(m>0.9))] 

仅当皮尔逊系数大于 0.9 时作为训练显示给我。但它只是让我列出了优于 0.9 的每个值......所以我不知道这个系数来自哪一列和哪一列。最好的是它在 table 中显示具有列名称的重要值,以便我可以轻松识别它们。 我想这样做的原因是因为 table 是 570 x 570 所以我不能查看每个 p 值只保留重要的值。

希望我说清楚了!这是我第一次post来这里,如果我做错了请告诉我!

感谢您的帮助!

我确定 R space 中某处有一个函数可以更快地执行此操作,但我编写了一个快速函数来将矩阵扩展为 data.frame "row" ] 和 "column" 作为列,值作为第三列。

matrixToFrame <- function(m, name) {
    e <- expand.grid(row=rownames(m), col=colnames(m))
    e[name] <- as.vector(m)
    e
}

我们可以将相关矩阵转换为数据框,如下所示:

> matrixToFrame(cor(f), "cor")
   row col       cor
1   S1  S1 1.0000000
2   S2  S1 0.5322052
3   S3  S1 0.8573687
4   S4  S1 0.8542438
5   S5  S1 0.6820144
6   S1  S2 0.5322052
....

我们可以合并 corr.testcor 的结果,因为列匹配

> b <- merge(matrixToFrame(corr.test(a)$p, "p"), matrixToFrame(cor(a), "cor"))
> head(b)
   row col            p       cor
1   S1  S1 0.0000000000 1.0000000
2   S1  S2 0.2743683745 0.5322052
3   S1  S3 0.0281656707 0.8573687
4   S1  S4 0.0281656707 0.8542438
5   S1  S5 0.2134783039 0.6820144
6   S2  S1 0.1402243214 0.5322052

然后我们就可以过滤我们想要的元素

> b[b$cor > .5 & b$p > .2,]
   row col         p       cor
2   S1  S2 0.2743684 0.5322052
5   S1  S5 0.2134783 0.6820144
8   S2  S3 0.2743684 0.5356585
10  S2  S5 0.2134783 0.6724486
15  S3  S5 0.2134783 0.6827349

编辑:我发现 R matrix to rownames colnames values,它提供了 matrixToFrame 的几次尝试;不过,没有什么比我这里的更优雅了。

EDIT2:确保仔细阅读 corr.test 的文档——看起来不同的信息被编码在上下对角线 (?) 中,所以这里的结果可能具有欺骗性。您可能希望在最后的过滤步骤之前使用 lower.triupper.tri 进行一些过滤。