R将相关函数应用于列表

时间:2015-05-20 03:14:17

标签: r list function

我有一个这样的数据框:

set.seed(1)
category <- c(rep('A',100), rep('B',100), rep('C',100))
var1 = rnorm(1:300)
var2 = rnorm(1:300)
df<-data.frame(category=category, var1 = var1, var2=var2)

我需要按类别计算var1和var2之间的相关性。我想我可以先split df category,然后将cor功能应用到列表中。但我真的很担心使用lapply函数。 有人可以帮助我吗?

3 个答案:

答案 0 :(得分:2)

这应该产生预期的结果:

lapply(split(df, category), function(dfs) cor(dfs$var1, dfs$var2))

编辑:

您也可以使用by(根据@thelatemail的建议):

by(df, df$category, function(x) cor(x$var1,x$var2)) 

答案 1 :(得分:1)

您可以使用sapply获取相同内容,但可以使用向量,而不是列表

sapply(split(df, category), function(dfs) cor(dfs$var1, dfs$var2))

答案 2 :(得分:1)

仅供比较,以下是dplyr包的使用方法。

library(dplyr)
df %>% group_by(category) %>% summarize(cor=cor(var1,var2))

#   category         cor
# 1        A -0.05043706
# 2        B  0.13519013
# 3        C -0.04186283