我有一个数据框,看起来像这样:

Samples   GENE GEN1  GEN2 GEN3   GEN4 GEN5
Sample1     21.0  160 110 3.90 2.62 16.5
Sample2  21.0  160 110 3.90 2.88 17.0
Sample3    22.8  108  5 3.85 2.32 18.6

我假装的是使用列GENE与其他列(即GENEvsGEN1、GENEvsGEN2等)执行Spearman关联. 并获得包含每列的rho和p值的表(结果是虚构的):

             rho     p-value
GENEvsGEN1    0.01193936     0.34
GENEvsGEN2 0.0113436     0.034

我知道我可以通过以下方式单独获得它:

res2 <-cor.test(data$GENE, data$GEN1,  method = "spearman")
res2

但我有近5000列,所以手动操作每一列都不可行.

有什么建议可以告诉我该怎么处理吗? 谢谢!!

推荐答案

您可以使用for循环来存储每个比较,如下所示

### Initiating data
data <- data.frame(GENE=rnorm(100),
                   GEN1=rnorm(100),
                   GEN2=rnorm(100),
                   GEN3=rnorm(100))

### Initiating empty dataframe for storing results
matCorrSpearman <- data.frame(gene=paste("GENE vs ", colnames(data)[-1]), rho=rep(NA, ncol(data)-1), pvalue=NA)

### Storing results through a loop
for(i in 2:ncol(data)){
  res <- cor.test(data[, "GENE"], data[, i], method="spearman")
  matCorrSpearman$rho[i-1] <- res$estimate
  matCorrSpearman$pvalue[i-1] <- res$p.value
}

### Display results
matCorrSpearman

结果

           gene        rho    pvalue
1 GENE vs  GEN1 0.10882688 0.2806195
2 GENE vs  GEN2 0.05983798 0.5536572
3 GENE vs  GEN3 0.15259526 0.1294692

R相关问答推荐

R函数,用于生成伪随机二进制序列,其中同一数字在一行中不出现超过两次

使用data.table::fcase()而不是dplyr::case_When()时保持值

使用rvest从多个页面抓取时避免404错误

给定开始日期和月份(数字),如何根据R中的开始日期和月数创建日期列

条形图顶部与其错误条形图不对齐

更新R中的数据表(使用data.table)

从多个可选列中选取一个值到一个新列中

如果满足条件,则替换列的前一个值和后续值

在鼠标悬停时使用Plotly更改geom_point大小

了解nchar在列表上的意外行为

将日期列从字符转换为日期得到的结果是NAS

基于已有ID列创建唯一ID

如何在R曲线图弹出窗口中更改r和theta标签

当y为负值时,无法使stat_cor正确定位到底部?

R Bupar:获取每个 case 的踪迹

根据存储在另一个数据帧中的变量名称获取相应的值?

ggplot2标记位置未居中

当标题在shinydashboard中禁用时,将侧栏菜单移至顶部

使用从ls()获取名称的归约到左联接数据帧

带布尔子集的`<;-`如何创建不存在的列?