【问题标题】:Corr between every nth variable每第 n 个变量之间的校正
【发布时间】:2018-07-05 02:16:09
【问题描述】:

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

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

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

【问题讨论】:

  • 只需使用seqlapply(7:9, function(i) corr(df1[seq(i, ncol(df1), by = 29)], use = "p")) 您可以查看lapply(7:9, function(i) seq(i, ncol(df1), by = 29)) 的输出
  • 另一个选项是split 方法lapply(split.default(df2, (seq_along(df2)-1) %% 29), cor, use = "p") 其中'df2' 是df2 <- df1[-(1:6)]

标签: r loops iteration correlation


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2022-07-20
    • 1970-01-01
    • 2012-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-11
    相关资源
    最近更新 更多