【问题标题】:processing multiple files in pairs in R在R中成对处理多个文件
【发布时间】:2023-01-05 00:18:08
【问题描述】:

我在一个文件夹中有多个 .csv 文件。我想选择每对可能的货币对并进行一些计算。这是一个示例文件名:

files <- c("/Users/st/Desktop/Form_Number_1.csv",
           "/Users/st/Desktop/Form_Number_2.csv",
           "/Users/st/Desktop/Form_Number_3.csv",
           "/Users/st/Desktop/Form_Number_4.csv")

对于每一对,我想通过 id 合并它们并计算相关性并存储它们。

所以,手动,

dat1 <- read_csv("/Users/st/Desktop/Form_Number_1.csv")
dat2 <- read_csv("/Users/st/Desktop/Form_Number_2.csv")

dat.merge <- merge(dat1, dat2, by = "id")

correlation <- cor(dat.merge$score.x, dat.merge$score.y) 

我怎样才能一次做到这一点?

【问题讨论】:

    标签: r


    【解决方案1】:

    combn 是你的朋友。

    alldat <- map(files, read_csv)
    combos <- combn(1:length(alldat), 2)
    
    calc_func <- function(dat1, dat2) {
      dat.merge <- merge(dat1, dat2, by = "id")
      cor(dat.merge$score.x, dat.merge$score.y)
    }
    
    results <- apply(combos, 2, (x) calc_func(alldat[[ x[1] ]],
                                                      alldat[[ x[2] ]]))
    
    
    

    也就是说,我不喜欢这种方法。我认为更优雅和高效的方法是从每个数据帧中提取分数列,然后通过调用cor计算相关系数:

    library(tidyverse)
    scores <- map(alldat, ~ .x$score)
    scores <- reduce(scores, cbind)
    cor(scores)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多