如何在 R 中不重复地对所有列进行一次配对?
How to pair all columns once with no repeats in R?
我有一个包含 200 列和每列 1000 行观察值的数据集。我试图找到每一列之间的相关性,没有重复。因此,例如,第 1 列和第 2 列、第 1 列和第 3 列、第 2 列和第 3 列,但不是第 3 列和第 1 列,因为它与第一对相同。从数学上讲,我应该有 19900 对列,但我不知道如何得到它。到目前为止我的代码如下:
corr.results<- rep(NA,19900)
for(i in 1:19900)
{
column1<- i
column2<- i+1
results<- cor.test(all.null.data[ ,column1], all.null.data[ ,column2],
alternative = "two.sided", method="pearson",
exact=NULL, conf.level=0.95, continuity=FALSE)
corr.results[i]<- results$p.value
}
View(corr.results)
显然,这是不正确的,因为我只做相邻的对(例如 1&2、2&3、3&4 等),但这就是我目前的全部。
将您的示例与(双)循环和 mtcars 玩具数据集一起使用
res=list()
for (i in 1:(ncol(mtcars)-1)) {
for (j in (i+1):ncol(mtcars)) {
res=c(
res,
list(c(i,j,cor.test(mtcars[,i],mtcars[,j])$p.value))
)
}
}
res=do.call(rbind,res)
colnames(res)=c("i","j","p")
使用combn
创建所有可能的组合。
combn(seq_along(all.null.data), 2, function(x) {
cor.test(all.null.data[ ,x[1]], all.null.data[ ,x[2]],
alternative = "two.sided", method="pearson",
exact=NULL, conf.level=0.95, continuity=FALSE)$p.value
}) -> corr.results
corr.results
对于 200 列,它将 return 19900 个值提供给您。
ncol(combn(1:200, 2))
#[1] 19900
我有一个包含 200 列和每列 1000 行观察值的数据集。我试图找到每一列之间的相关性,没有重复。因此,例如,第 1 列和第 2 列、第 1 列和第 3 列、第 2 列和第 3 列,但不是第 3 列和第 1 列,因为它与第一对相同。从数学上讲,我应该有 19900 对列,但我不知道如何得到它。到目前为止我的代码如下:
corr.results<- rep(NA,19900)
for(i in 1:19900)
{
column1<- i
column2<- i+1
results<- cor.test(all.null.data[ ,column1], all.null.data[ ,column2],
alternative = "two.sided", method="pearson",
exact=NULL, conf.level=0.95, continuity=FALSE)
corr.results[i]<- results$p.value
}
View(corr.results)
显然,这是不正确的,因为我只做相邻的对(例如 1&2、2&3、3&4 等),但这就是我目前的全部。
将您的示例与(双)循环和 mtcars 玩具数据集一起使用
res=list()
for (i in 1:(ncol(mtcars)-1)) {
for (j in (i+1):ncol(mtcars)) {
res=c(
res,
list(c(i,j,cor.test(mtcars[,i],mtcars[,j])$p.value))
)
}
}
res=do.call(rbind,res)
colnames(res)=c("i","j","p")
使用combn
创建所有可能的组合。
combn(seq_along(all.null.data), 2, function(x) {
cor.test(all.null.data[ ,x[1]], all.null.data[ ,x[2]],
alternative = "two.sided", method="pearson",
exact=NULL, conf.level=0.95, continuity=FALSE)$p.value
}) -> corr.results
corr.results
对于 200 列,它将 return 19900 个值提供给您。
ncol(combn(1:200, 2))
#[1] 19900