每 n 个变量之间的 Corr

Corr between every nth variable

我有一个很长的多列列表,表示随时间变化的不同变量。我正在尝试 运行 三个时间点之间的相关性,例如

cor(df1[,c(7,36,65)], use = "p")
cor(df1[,c(8,37,66)], use = "p")
cor(df1[,c(9,38,67)], use = "p")

这很耗时,如果我在不久的将来添加/删除列,我希望能够运行。如您所见,它显然遵循一种模式,我尝试使用 apply:

实现这一点
apply(df1[,c(7:93)], 2, function(x) corr(df1[,c(x, x+29, x+58)], use = "p"))

我也试过 for 循环:

for (i in 7:93) {
  cor(df1[, c(i,i+29,i+58)], use = "p")
}

显然我在写这两篇文章时都犯了错误。我知道必须有一个简单的方法来做到这一点,我错过了!

我们可以使用mapply并行选择列。

mapply(function(x, y, z) cor(df1[,c(x, y, z)], use = "p"), 7:35, 36:64, 65:93)

或者提前尝试另一个类似于@akrun 的解决方案

sapply(7:35, function(x) cor(df1[,c(x, x+29, x+58)], use = "p"))