我有一个数据集,其中我有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中实现这个目标?
谢谢大家。
答案 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之间的相关性,并以数据框中的原始变量名称命名。