这就是我的函数的一部分:
function_test <- function(x) {
fa_dataset <- test_survey %>%
filter(Tenure_Category == x) %>%
dplyr::select(c(Proud:Respect)) %>%
drop_na()
cor_mat_tenure <- cor(fa_dataset)
}
function_test("0-1 Yr")
function_test("1-2 Yr")
function_test("2-5 Yr")
我有一个包含 n 列的数据集,数据集“test_survey”中的一列是“Tenure_Category”。此列有 7 个不同的值:0-1 年、1-2 年、2-5 年、5-10 年、10-15 年、15-20 年、20+ 年。
我想添加到代码中。我希望函数能够识别这些不同的值,然后将它们一一输入到过滤器语句中。我不想在函数中手动指定参数(就像我上面所做的那样)。
我认为 for 循环会是更好的选择,比如:
for(i in 1:length(unique(test_survey$Tenure_Category))){
fa_dataset <- test_survey %>%
filter(Tenure_Category == test_survey[i]) %>%
dplyr::select(c(Proud:Respect)) %>%
drop_na()
cor_mat_tenure <- cor(fa_dataset)
}
不用说,这段代码不起作用。
如有任何帮助,我们将不胜感激。
谢谢你。
您的问题缺乏可重现的示例,并且缺乏清晰度。但如果我理解正确的话,您想通过
Tenure category
过滤数据框,然后计算 Proud
和 Respect
之间的相关性。是这样吗?另外,我假设您希望保留每个相关性的结果,同时保留指向 Tenure category
的链接。
下面是 for 循环解决方案的示例。
library(dplyr)
library(tidyverse)
tenure_category <- c('0-1 Yr', '1-2 Yr', '2-5 Yr', '5-10 Yr', '10-15 Yr', '15-20 Yr', '20+ Yr')
tenure_category <- sample(tenure_category, 100, replace = TRUE) # creates a vector with 100 observations of strings in tenure category
proud <- runif(100, min=0, max=100)
respect <- runif(100, min=0, max=100)
df <- data.frame(Tenure_Category = tenure_category, Proud = proud, Respect = respect)
names <- unique((tenure_category))
cor_l <- list() # list object to keep the resulting correlations
for (i in 1:length(names)){
tmp <- df %>%
filter(Tenure_Category == names[i]) %>%
select(Proud, Respect) # unclear from your question if you actually need to keep this data frame or you just need the resulting correlation
cor_l[[i]] <- cor(tmp)
# Adding name to each list oject, so that you keep track of Tenure_Category
names(cor_l)[i] <- names[i]
}
print(cor_l[1:2])
# $`15-20 Yr`
# Proud Respect
# Proud 1.0000000 0.1439552
# Respect 0.1439552 1.0000000
#
# $`10-15 Yr`
# Proud Respect
# Proud 1.000000000 -0.004051884
# Respect -0.004051884 1.000000000