【问题标题】:I want to do correlation for many data frame我想为许多数据框做关联
【发布时间】:2015-07-21 05:14:28
【问题描述】:

我有将近 13 个文件,我想对其进行三种类型的关联。 除了值之外,所有文件都具有相同的内容。

例如:

v1 v2 v3 v4 v5 v6 v7 v8 ......... v50

v6 和 v20 之间的第一个关联 v7和v21之间的第二个相关性 v8 和 v22 之间的第三个相关性

我的数据有缺失值。

为每个文件手动执行会导致脚本太长,我想为所有文件执行循环功能(不幸的是,我不是循环功能专家,我尝试了很多)我需要帮助

【问题讨论】:

    标签: r function loops correlation


    【解决方案1】:

    如果 'd1', 'd2', ...'d13' 是数据集并且列的顺序相同,我们可以将数据集放在 list 中并获取指定的 cor列。 ?cor 中有一些选项可以在存在缺失值的情况下计算协方差。在这里,我使用了na.or.complete。我们可以根据需要进行更改。

    lapply(mget(paste0('d', 1:13)), function(x) 
          diag(cor(x[,6:8], x[,20:22], use='na.or.complete'))) 
    

    直接将文件读入list 可能比在全局环境中创建单独的data.frame 对象更好。假设文件都在工作目录中。

    files <- list.files(pattern='file\\d+.txt')#change the pattern as needed
    lapply(files, function(x) {
                    x1 <- read.table(x, header=TRUE)
                    diag(cor(x1[,6:8], x1[,20:22], use = 'na.or.complete'))}) 
    

    【讨论】:

    • 我刚刚创建了这段代码,结果匹配完美,期望输出结果不按顺序>>>>>目录文件> 相关性 > for (file in files) { + file_data
    • @user1894845 不知道为什么它不正常。我尝试了一个示例数据集,它是有序的。最好提供一些示例数据集。您的代码与我使用的不同。
    • 我将文件命名为 x1 ....... x13 并且输出显示 x1, x10, x11, x12, x13, x2, x3 , x4 , x5, x6, x7, x8 , x9。
    • @user1894845 这些是文件名吗?即x1.txtx2. txt。等等...如果这些是文件名。 files &lt;- paste0('x', 1:13, '.txt'); lapply(files, function(x) {x1 &lt;- read.table(x, header=TRUE); diag(cor(x1[,6:8], x1[,20:22], use= 'na.or.complete'))})
    • 感谢您的帮助。它工作得很好。我的文件名和结果都是有序的。
    【解决方案2】:

    这是一个蛮力版本(包括数据生成),它可能适用于您的目的,关于您的数据/任务结构的更多信息可以帮助提高效率:

    N <- 10
    k <- 50
    
    d <- data.frame(matrix(runif(N * k), ncol = k))
    
    sapply(20:k, function(col) cor(d[,col - 14], d[,col]))
    

    编辑:问题已被编辑,我不确定这是否真的是你现在想要的。

    【讨论】:

    • 感谢您为我提供答案。很难解释我的真正任务,但示例描述了它。
    猜你喜欢
    • 2019-09-17
    • 2022-06-13
    • 1970-01-01
    • 2011-07-25
    • 1970-01-01
    • 2019-05-30
    • 2021-12-17
    • 2021-06-18
    • 2019-08-15
    相关资源
    最近更新 更多