首页 文章

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

提问于
浏览
1

对不起我的英文不好,我想把很多数据帧的相关系数计算成一个列表,所以我有一个28个数据帧的列表,但我想计算前7个Dataframe的系数,每个数据帧有两列,一次是日期和其他 Value 观:

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,第二列是“PRECIPITACION”,8到14 DF是“RADIACION”,对于15到21 DF,第二列是“ TEMPERATURA“,对于22到28 DF,第二列是”VELOCIDAD“ . 所以我想计算每组数据帧的相关系数,对此有何想法?

谢谢你的回答

2 回答

  • 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的相关性,但此代码不起作用 .

  • 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等订购的,因此假设采样日期相同或相似,请使用您需要的列列出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
    

    现在我们可以问,与使用'cor`的内容有什么关联 .

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

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

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

相关问题