在 R 中对数据集进行多重相关的循环
Loop for doing multiple correlations on dataset in R
我有一个包含 x 列的数据集,由多组测试结果组成,例如 test1_1、test1_2 等。每组测试都有不同数量的测试结果所以每次测试的实际数字都不一样。最后一列是我的目标变量。我希望确定哪些测试与目标变量相关,但我还想为每组测试创建数据集。我还将针对目标变量绘制每个测试的相关图。我怀疑我可能可以在 for/while 循环中的几行代码中实现所有这些,但是,我不确定从哪里开始。
使用lapply
可以这样实现:
library(dplyr)
library(corrplot)
set.seed(42)
dataset <- data.frame(
test1_1 = runif(20),
test1_2 = runif(20),
test2_1 = runif(20),
test2_2 = runif(20),
Target = runif(20)
)
test_cols <- gsub("_\d+$", "", names(dataset))
test_cols <- test_cols[grepl("^test", test_cols)]
test_cols <- unique(test_cols)
test_cols <- setNames(test_cols, test_cols)
test_fun <- function(x, test) {
x <- x %>%
select((starts_with(test)) | matches("Target"))
cor(x)
}
cor_test <- lapply(test_cols, test_fun, x = dataset)
cplot <- lapply(cor_test, corrplot)
这类似于@stefan 的回答,使用split.default
按列名称中的模式拆分列。
tmp <- dplyr::select(dataset, -Target)
list_plot <- lapply(split.default(tmp, sub('_.*', '', names(tmp))), function(x) {
corrplot::corrplot(cor(cbind(x, Target = dataset$Target)))
})
我有一个包含 x 列的数据集,由多组测试结果组成,例如 test1_1、test1_2 等。每组测试都有不同数量的测试结果所以每次测试的实际数字都不一样。最后一列是我的目标变量。我希望确定哪些测试与目标变量相关,但我还想为每组测试创建数据集。我还将针对目标变量绘制每个测试的相关图。我怀疑我可能可以在 for/while 循环中的几行代码中实现所有这些,但是,我不确定从哪里开始。
使用lapply
可以这样实现:
library(dplyr)
library(corrplot)
set.seed(42)
dataset <- data.frame(
test1_1 = runif(20),
test1_2 = runif(20),
test2_1 = runif(20),
test2_2 = runif(20),
Target = runif(20)
)
test_cols <- gsub("_\d+$", "", names(dataset))
test_cols <- test_cols[grepl("^test", test_cols)]
test_cols <- unique(test_cols)
test_cols <- setNames(test_cols, test_cols)
test_fun <- function(x, test) {
x <- x %>%
select((starts_with(test)) | matches("Target"))
cor(x)
}
cor_test <- lapply(test_cols, test_fun, x = dataset)
cplot <- lapply(cor_test, corrplot)
这类似于@stefan 的回答,使用split.default
按列名称中的模式拆分列。
tmp <- dplyr::select(dataset, -Target)
list_plot <- lapply(split.default(tmp, sub('_.*', '', names(tmp))), function(x) {
corrplot::corrplot(cor(cbind(x, Target = dataset$Target)))
})