1列中2组之间的相关性

时间:2017-07-20 13:21:48

标签: r dataframe

我有一个数据集,其中我有450.000列和660行。前330行是组“A”,最后330组是“B”。我想计算A组和B组之间每列的相关性。

到目前为止,我设法:

setkey(df, group)
cor(df["A"]$value, df["B"]$value)

返回第一列的两组之间的相关性。

但是,我想对所有450.000列执行此操作,我在这里使用列名称和两个组之间的相关性进入新数据框。

此外,我必须考虑到group A(第1行)的第一行与group B的第一行(第331行)相关,第二行与第二行相关。 B组(第2行和第332行)等等。

有没有人知道如何在R中实现这个目标?

谢谢大家。

3 个答案:

答案 0 :(得分:2)

# sample data
df = data.frame(a=runif(660,1,10),b=runif(660,1,10),c=runif(660,1,10))

data.frame(corr=sapply(df,function(x) {cor(x[1:330],x[331:nrow(df)])}))

输出:

         corr
a -0.05902668
b  0.03443904
c -0.09899892

答案 1 :(得分:2)

这是一个purrr解决方案。 map_df返回一个数据框。

示例数据:

df<-data.frame(a1=rnorm(660,50,20),a2=rnorm(660,50,20))

并且,每列中的组(a和b)之间的相关性:

library(purrr)
map_df(df, ~{cor(.[1:330],.[331:660])})

返回

# A tibble: 1 × 2
#           a1           a2
#        <dbl>        <dbl>
#1 -0.09949217 -0.008308669

答案 2 :(得分:0)

尝试循环遍历所有列。

df<-data.frame(a1=rnorm(660),a2=rnorm(660))
cordf<-numeric()
for(i in 1:ncol(df)){cordf[i]<-cor(df[1:330,i],df[331:660,i])}
names(cordf)<-names(df) 

cordf包含第一行和最后一行330之间的相关性,并以数据框中的原始变量名称命名。