gpt4 book ai didi

r - 按行相关,在数据框内

转载 作者:行者123 更新时间:2023-12-01 11:18:36 24 4
gpt4 key购买 nike

我正在尝试计算大型数据帧的所有行之间的相关性,到目前为止已经提出了一个简单的 for 循环。例如:

name <- c("a", "b", "c", "d")
col1 <- c(43.78, 43.84, 37.92, 31.72)
col2 <- c(43.80, 43.40, 37.64, 31.62)
col3 <- c(43.14, 42.85, 37.54, 31.74)
df <- data.frame(name, col1, col2, col3)
cor.df <- data.frame(name1=NA, name2=NA,correl=NA)

for(i in 1: (nrow(df) - 1)) {
for(j in (i+1): nrow(df) ) {
v1 <- as.numeric( df[i, 2:ncol(df)] )
v2 <- as.numeric( df[j, 2:ncol(df)] )
correl <- cor(v1, v2)

name1 <- df[i, "name"]
name2 <- df[j, "name"]

dftemp <- data.frame(name1, name2, correl)
cor.df <- rbind(cor.df, dftemp)
}
}

na.omit(cor.df)

# name1 name2 correl
# a b 0.8841255
# a c 0.6842705
# a d -0.6491118
# b c 0.9457125
# b d -0.2184630
# c d 0.1105508

鉴于大数据帧和低效的for循环,相关计算需要很长时间。有人对如何使其更快有任何建议吗?请注意,我在一个列表中有很多数据框,所以我可以使用 lapply(但还没有弄清楚如何编写代码行)

最佳答案

删除第一列,转置并使用 base::cor 函数:

> cor(t(df[-1]))
[,1] [,2] [,3] [,4]
[1,] 1.0000000 0.8841255 0.6842705 -0.6491118
[2,] 0.8841255 1.0000000 0.9457125 -0.2184630
[3,] 0.6842705 0.9457125 1.0000000 0.1105508
[4,] -0.6491118 -0.2184630 0.1105508 1.0000000
# pretty output
x <- cor(t(df[, -1]))
x[upper.tri(x, diag = TRUE)] <- NA
rownames(x) <- colnames(x) <- df$name
x <- na.omit(reshape::melt(t(x)))
x <- x[ order(x$X1, x$X2), ]

x
# X1 X2 value
# 5 a b 0.8841255
# 9 a c 0.6842705
# 13 a d -0.6491118
# 10 b c 0.9457125
# 14 b d -0.2184630
# 15 c d 0.1105508

关于r - 按行相关,在数据框内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47016982/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com