为不同变量和组之间的相关性创建数据帧

时间:2017-07-11 08:13:47

标签: r function loops dataframe correlation

我需要一个数据框,其中列出了修补程序和更改变量之间的相关性,除以子组。 下面列出了我提出的最接近的解决方案,使用数据集mtcars作为示例(相关性不必有意义)。

library(datasets)
data(mtcars)
df <- load(mtcars)

as.factor(mtcars$am)
as.factor(mtcars$gear)
as.factor(mtcars$carb)

library(plyr)
cors <- function(var, group) {
  corrl <- ddply(df, .(group), summarise, "corr" = cor(var, mpg, method = "spearman"))
}

dafr.var <- as.vector(c("cyl", "disp", "hp", "drat"))
args<- merge(as.character(c("am", "gear", "carb")), dafr.var)
args[,1:2]<- lapply(args[,1:2], as.character)
colnames(args) <- c("grouping", "variable")

cortable <- NULL
for (i in 1:nrow(args)){
  cortable<- rbind(cortable, cors(var = df[args[i,2]], group = df[args[i,1]]))
}
cortable

&#34; Cortable&#34;将是最终的数据框,它列出了子组在中间步骤中列出的相关性 - 数据框&#34; args&#34;。

我的问题清楚了吗?有谁知道为什么这不起作用,或者我可以在我的代码中改变什么? 任何帮助深表感谢。

亲切的问候。

1 个答案:

答案 0 :(得分:1)

这样的事情能帮助你找到你想要的东西吗?

df <- mtcars

df$make <- rownames(df)
df$make <- sapply(df$make, function(x) strsplit(x, " ")[[1]][1])

cors <- function(var, group) {
  require(plyr)
  corrl  <- ddply(df, group, function(x) cor(x[,var], x[,"mpg"], method = "spearman"))
  corrl$var <- var
  corrl$group <- group
  colnames(corrl) <- c("value", "corr", "var", "group")
  return(corrl)
}

dafr.var <- as.vector(c("cyl", "disp", "hp", "drat"))
args <- merge(as.character(c("am", "gear", "carb", "make")), dafr.var)
args[,1:2] <- lapply(args[,1:2], as.character)
colnames(args) <- c("grouping", "variable")


cortable <- data.frame(value = numeric(), corr = numeric(), var = character(), group = character(), stringsAsFactors = FALSE)

for (i in 1:nrow(args)){
  cortable <- rbind(cortable, cors(var = args[i,2], group = args[i,1]))
}

cortable <- cortable[,c("var","group","value","corr")]

cortable