首页 > 解决方案 > 每第 n 个变量之间的校正

问题描述

我有一长串代表不同变量随时间变化的多列。我正在尝试在三个时间点之间建立相关性,例如

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")
}

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

标签: rloopsiterationcorrelation

解决方案


我们可以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"))

推荐阅读