如何计算数据框列表中某些列之间的相关性?
How to calculate correlations between certain columns in a list of dataframes?
我需要从标准正态分布 (X0, X1, X2, ..., X19) 生成 20 个不同的样本 (n=100) 并计算 X0 与所有其他样本 X2...X19 之间的相关性.我知道如何对一个“整个样本”(X0...X19) 执行此操作,但我应该同时对多个 X0...X19 样本执行此操作。我尝试生成一个数据帧列表(每个数据帧包含一个 X0...X19 样本)并对其进行迭代,但由于某种原因失败了。
我的数据是这样的:
dataframes <- replicate(10, as.data.frame(replicate(20, rnorm(100))))
head(dataframes)
# [,1] [,2] [,3] [,4] [,5] [,6]
#V1 Numeric,100 Numeric,100 Numeric,100 Numeric,100 Numeric,100 Numeric,100
#V2 Numeric,100 Numeric,100 Numeric,100 Numeric,100 Numeric,100 Numeric,100
#V3 Numeric,100 Numeric,100 Numeric,100 Numeric,100 Numeric,100 Numeric,100
#V4 Numeric,100 Numeric,100 Numeric,100 Numeric,100 Numeric,100 Numeric,100
#V5 Numeric,100 Numeric,100 Numeric,100 Numeric,100 Numeric,100 Numeric,100
#V6 Numeric,100 Numeric,100 Numeric,100 Numeric,100 Numeric,100 Numeric,100
# [,7] [,8] [,9] [,10]
#V1 Numeric,100 Numeric,100 Numeric,100 Numeric,100
#V2 Numeric,100 Numeric,100 Numeric,100 Numeric,100
#V3 Numeric,100 Numeric,100 Numeric,100 Numeric,100
#V4 Numeric,100 Numeric,100 Numeric,100 Numeric,100
#V5 Numeric,100 Numeric,100 Numeric,100 Numeric,100
#V6 Numeric,100 Numeric,100 Numeric,100 Numeric,100
我试过这样计算相关性:
lapply(frames,
function(x){
cor(x[,1]$V1, x[-c(1:1)])
return(x)
}
)
但这导致了一个错误:
Error in x[, 1] : incorrect number of dimensions
我不太熟悉 lapply 或一般的循环,所以我真的需要一些帮助。
您的可重现示例不可重现。一个问题是您的数据不是 data.frame
或 list
class(dataframes)
[1] "matrix" "array"
此外还有一些容易犯的错误,比如在lapply
中返回x
(x
是这里的输入而不是结果)和双子集x
。修复这些小错误可以解决您的问题
dataframes <- replicate(10,
as.data.frame(replicate(20, rnorm(100)))
simplify = FALSE) # <=== fix
lapply(dataframes, # <=== name corrected
function(x){
cor(x$V1, x[-1]) # no need to subset x before `$V1`
# return(x) # <== Remove return x
}
)
我需要从标准正态分布 (X0, X1, X2, ..., X19) 生成 20 个不同的样本 (n=100) 并计算 X0 与所有其他样本 X2...X19 之间的相关性.我知道如何对一个“整个样本”(X0...X19) 执行此操作,但我应该同时对多个 X0...X19 样本执行此操作。我尝试生成一个数据帧列表(每个数据帧包含一个 X0...X19 样本)并对其进行迭代,但由于某种原因失败了。
我的数据是这样的:
dataframes <- replicate(10, as.data.frame(replicate(20, rnorm(100))))
head(dataframes)
# [,1] [,2] [,3] [,4] [,5] [,6]
#V1 Numeric,100 Numeric,100 Numeric,100 Numeric,100 Numeric,100 Numeric,100
#V2 Numeric,100 Numeric,100 Numeric,100 Numeric,100 Numeric,100 Numeric,100
#V3 Numeric,100 Numeric,100 Numeric,100 Numeric,100 Numeric,100 Numeric,100
#V4 Numeric,100 Numeric,100 Numeric,100 Numeric,100 Numeric,100 Numeric,100
#V5 Numeric,100 Numeric,100 Numeric,100 Numeric,100 Numeric,100 Numeric,100
#V6 Numeric,100 Numeric,100 Numeric,100 Numeric,100 Numeric,100 Numeric,100
# [,7] [,8] [,9] [,10]
#V1 Numeric,100 Numeric,100 Numeric,100 Numeric,100
#V2 Numeric,100 Numeric,100 Numeric,100 Numeric,100
#V3 Numeric,100 Numeric,100 Numeric,100 Numeric,100
#V4 Numeric,100 Numeric,100 Numeric,100 Numeric,100
#V5 Numeric,100 Numeric,100 Numeric,100 Numeric,100
#V6 Numeric,100 Numeric,100 Numeric,100 Numeric,100
我试过这样计算相关性:
lapply(frames,
function(x){
cor(x[,1]$V1, x[-c(1:1)])
return(x)
}
)
但这导致了一个错误:
Error in x[, 1] : incorrect number of dimensions
我不太熟悉 lapply 或一般的循环,所以我真的需要一些帮助。
您的可重现示例不可重现。一个问题是您的数据不是 data.frame
或 list
class(dataframes)
[1] "matrix" "array"
此外还有一些容易犯的错误,比如在lapply
中返回x
(x
是这里的输入而不是结果)和双子集x
。修复这些小错误可以解决您的问题
dataframes <- replicate(10,
as.data.frame(replicate(20, rnorm(100)))
simplify = FALSE) # <=== fix
lapply(dataframes, # <=== name corrected
function(x){
cor(x$V1, x[-1]) # no need to subset x before `$V1`
# return(x) # <== Remove return x
}
)