在多对列上提取cor.test的结果并设置其格式

在多对列上提取cor.test的结果并设置其格式,r,statistics,correlation,R,Statistics,Correlation,我试图生成相关矩阵的表输出。具体来说,我使用for循环来识别第4:40列到第1列中的所有数据之间的相关性。虽然该表的结果很不错,但它并没有确定要与什么进行比较。在检查cor.test的属性时,我发现data.name被指定为x[1]和y[1],这不足以追溯哪些列与哪些列进行了比较。这是我的密码: input <- read.delim(file="InputData.txt", header=TRUE) x<-input[,41, drop=FALSE] y=input[,4:40]

我试图生成相关矩阵的表输出。具体来说,我使用for循环来识别第4:40列到第1列中的所有数据之间的相关性。虽然该表的结果很不错,但它并没有确定要与什么进行比较。在检查
cor.test
的属性时,我发现data.name被指定为
x[1]
y[1]
,这不足以追溯哪些列与哪些列进行了比较。这是我的密码:

input <- read.delim(file="InputData.txt", header=TRUE)
x<-input[,41, drop=FALSE]
y=input[,4:40]
corr.values <- vector("list", 37)
for (i in 1:length(y) ){
  corr.values[[i]] <- cor.test(x[[1]], y[[i]], method="pearson")
}
lres <- sapply(corr.values, `[`, c("statistic","p.value","estimate","method", "data.name"))
lres<-t(lres)
write.table(lres, file="output.xls", sep="\t",row.names=TRUE)

显然,这并不完美,因为行是有编号的,并且无法区分哪些关联与哪些关联。有办法解决这个问题吗?我尝试了许多解决方案,但没有一个奏效。我知道技巧必须是编辑
数据.name
属性,但我不知道如何做到这一点。

这里有一种方法可以返回一个包含所有
cor.test
结果的数据帧,其中还包括计算每个相关性的变量的名称:我们创建一个函数提取
cor.test
的相关结果,然后使用
mapply
将函数应用于我们需要相关性的每对变量
mapply
返回一个列表,因此我们使用
do.call(rbind,…)
将其转换为数据帧

# Function to extract correlation coefficient and p-values
corrFunc <- function(var1, var2, data) {
  result = cor.test(data[,var1], data[,var2])
  data.frame(var1, var2, result[c("estimate","p.value","statistic","method")], 
             stringsAsFactors=FALSE)
}

## Pairs of variables for which we want correlations
vars = data.frame(v1=names(mtcars)[1], v2=names(mtcars)[-1])

# Apply corrFunc to all rows of vars
corrs = do.call(rbind, mapply(corrFunc, vars[,1], vars[,2], MoreArgs=list(data=mtcars), 
                              SIMPLIFY=FALSE))

     var1 var2   estimate      p.value statistic                               method
cor   mpg  cyl -0.8475514 9.380327e-10 -8.747152 Pearson's product-moment correlation
cor1  mpg disp -0.7761684 1.787835e-07 -6.742389 Pearson's product-moment correlation
cor2  mpg   hp  0.4186840 1.708199e-02  2.525213 Pearson's product-moment correlation
cor3  mpg drat  0.6811719 1.776240e-05  5.096042 Pearson's product-moment correlation
cor4  mpg   wt  0.4802848 5.400948e-03  2.999191 Pearson's product-moment correlation
cor5  mpg qsec  0.6640389 3.415937e-05  4.864385 Pearson's product-moment correlation
cor6  mpg   vs  0.5998324 2.850207e-04  4.106127 Pearson's product-moment correlation
cor7  mpg   am  1.0000000 0.000000e+00       Inf Pearson's product-moment correlation
cor8  mpg gear -0.8676594 1.293959e-10 -9.559044 Pearson's product-moment correlation
cor9  mpg carb -0.8521620 6.112687e-10 -8.919699 Pearson's product-moment correlation
用于提取相关系数和p值的函数
谢谢你。如果我想输出'r'及其方向(+或-),我应该向data.frame(var1,var2,result[c(“estimate”,“p.value”,“statistic”,“method”)],stringsAsFactors=FALSE)添加哪个属性?有一件事让我感到困惑,阅读它也没有帮助,那就是'stringsAsFactors=FALSE'“.这到底是做什么的?”?为什么选择它?如果设置
stringsAsFactors=FALSE
character类列将保留字符。否则,R会将它们设置为factor类。我不确定我是否理解您的第一条评论。“estimate”列是r值(其中“r值”是相关系数)。我感到困惑,因为输出被移到了左侧。非常感谢您的回复。
# Function to extract correlation coefficient and p-values
corrFunc <- function(var1, var2, data) {
  result = cor.test(data[,var1], data[,var2])
  data.frame(var1, var2, result[c("estimate","p.value","statistic","method")], 
             stringsAsFactors=FALSE)
}

## Pairs of variables for which we want correlations
vars = data.frame(v1=names(mtcars)[1], v2=names(mtcars)[-1])

# Apply corrFunc to all rows of vars
corrs = do.call(rbind, mapply(corrFunc, vars[,1], vars[,2], MoreArgs=list(data=mtcars), 
                              SIMPLIFY=FALSE))

     var1 var2   estimate      p.value statistic                               method
cor   mpg  cyl -0.8475514 9.380327e-10 -8.747152 Pearson's product-moment correlation
cor1  mpg disp -0.7761684 1.787835e-07 -6.742389 Pearson's product-moment correlation
cor2  mpg   hp  0.4186840 1.708199e-02  2.525213 Pearson's product-moment correlation
cor3  mpg drat  0.6811719 1.776240e-05  5.096042 Pearson's product-moment correlation
cor4  mpg   wt  0.4802848 5.400948e-03  2.999191 Pearson's product-moment correlation
cor5  mpg qsec  0.6640389 3.415937e-05  4.864385 Pearson's product-moment correlation
cor6  mpg   vs  0.5998324 2.850207e-04  4.106127 Pearson's product-moment correlation
cor7  mpg   am  1.0000000 0.000000e+00       Inf Pearson's product-moment correlation
cor8  mpg gear -0.8676594 1.293959e-10 -9.559044 Pearson's product-moment correlation
cor9  mpg carb -0.8521620 6.112687e-10 -8.919699 Pearson's product-moment correlation