计算列表中多个数据帧之间的相关性

时间:2018-05-23 20:51:39

标签: r list dataframe correlation

抱歉我的英文不好,我想把很多数据帧的相关系数计算成一个列表,所以我有一个28个数据帧的列表,但我想计算前7个数据帧的系数,每个数据帧有两列,一列是Date,另一列是它的值:

my.files <- list.files(pattern = ".csv")

my.data <- lapply(my.files,
              read.csv,
              header = TRUE, sep = ";")

ChangeType <- function(DF){
DF[,2] <- as.numeric(DF[,2])
DF
}


my.data <- lapply(my.data, ChangeType)

好吧,现在我的列表在每个数据帧中有4种不同类型的值,例如1到7 DF,第二列是&#34; PRECIPITACION&#34;,8到14 DF是&#34; RADIACION&# 34;对于15至21 DF,第二列是&#34; TEMPERATURA&#34;,对于22到28 DF,第二列是&#34; VELOCIDAD&#34;。所以我想计算每组数据帧的相关系数,对此有何看法?

感谢您的回答

2 个答案:

答案 0 :(得分:0)

]好吧,我试着计算列表中前7个DF的相关矩阵:

my.data.Hydro <- list()
my.data.Hydro[[1]] <- my.data[[1]]
colnames(my.data.Hydro[[1]]) <- c("DATE","PRECIPITACION_1")
my.data.Hydro[[2]] <- my.data[[2]]
colnames(my.data.Hydro[[2]]) <- c("DATE","PRECIPITACION_2")
my.data.Hydro[[3]] <- my.data[[3]]
colnames(my.data.Hydro[[3]]) <- c("DATE","PRECIPITACION_3")
my.data.Hydro[[4]] <- my.data[[4]]
colnames(my.data.Hydro[[4]]) <- c("DATE","PRECIPITACION_4")
my.data.Hydro[[5]] <- my.data[[5]]
colnames(my.data.Hydro[[5]]) <- c("DATE","PRECIPITACION_5")
my.data.Hydro[[6]] <- my.data[[6]]
colnames(my.data.Hydro[[6]]) <- c("DATE","PRECIPITACION_6")
my.data.Hydro[[7]] <- my.data[[7]]
colnames(my.data.Hydro[[7]]) <- c("DATE","PRECIPITACION_7")
Corr.Hydro <- lapply(my.data.Hydro, cor)

我尝试创建一个包含前7 DF的子列表,更改第二列的名称,并使用lapply为此子列表应用cor来计算此7 DF的相关性,但是这样代码不起作用。

答案 1 :(得分:0)

您的文件列表位于my.data。 文件1:7是Precipitacion,将它们绑在一起:

Precip <- rbind(my.data)[1:7]

为Radiacion,Temperatura,Velocidad做同样的事情:

Radia <- rbind(my.data)[8:14]
Tempur <- rbind(my.data)[15:21]
Veloc <- rbind(my.data)[22:28]

您的文件已订购日期,Precip或Date,Tempur&amp;等等假设 采样日期相同或相似,只使用您需要的列制作rbind文件列表:

clima_objs <- list(Precip[,1], Precip[,2], Radia[,2], Tempur[,2], 
Veloc[,2])

然后将cbind()这些组合成一个data.frame:

clima <- as.data.frame(do.call(cbind, clima_objs))

从$ V1- $ V5更改名称

 names(clima) <- c("Date", "Precipitacion", "Radiacion", 
"Temperatura", "Velocidad")

检查:

> head(clima)
   Date Precipitacion  Radiacion Temperatura  Velocidad
1 14610     84.284294  84.284294   84.284294  84.284294
2 14641     29.583552  29.583552   29.583552  29.583552
3 14669    105.209802 105.209802  105.209802 105.209802
4 14700     96.281924  96.281924   96.281924  96.281924
5 14730      5.033855   5.033855    5.033855   5.033855
6 14761     94.065157  94.065157   94.065157  94.065157

好的,cbind将我们的日期更改为数字,因此我们将其更改回来:

clima$Date <- as.Date.numeric(clima$Date, origin="1970-01-01")
> head(clima)
    Date Precipitacion  Radiacion Temperatura  Velocidad
1 2010-01-01     84.284294  84.284294   84.284294  84.284294
2 2010-02-01     29.583552  29.583552   29.583552  29.583552
3 2010-03-01    105.209802 105.209802  105.209802 105.209802
4 2010-04-01     96.281924  96.281924   96.281924  96.281924
5 2010-05-01      5.033855   5.033855    5.033855   5.033855
6 2010-06-01     94.065157  94.065157   94.065157  94.065157  

现在我们可以问,与使用&#39; cor`的内容有什么关联。

>cor(clima$Precipitacion, clima$Temperatura)
[1] 1

这是1,因为我在Date之后的每一列中使用了相同的数据。现在从Tempuratura取样

>cor(clima$Precipitacion, sample(clima$Temperatura))
[1] 0.04786067