gpt4 book ai didi

读取文件夹中的所有文件并将函数应用于每个数据框

转载 作者:行者123 更新时间:2023-12-02 05:54:41 24 4
gpt4 key购买 nike

我正在做一个相对简单的分析,我已将其放入特定文件夹中所有文件的函数中。我想知道是否有人有任何提示来帮助我在许多不同的文件夹上自动化该过程。

  1. 首先,我想知道是否有一种方法可以将特定文件夹中的所有文件直接读取到 R 中。我相信以下命令将列出所有文件:

files <- (Sys.glob("*.csv"))

...我从 Using R to list all files with a specified extension 找到的

然后以下代码将所有这些文件读取到 R 中。

listOfFiles <- lapply(files, function(x) read.table(x, header = FALSE)) 

…来自Manipulating multiple files in R

但是这些文件似乎是作为一个连续列表而不是单个文件读入的……我如何更改脚本以将特定文件夹中的所有 csv 文件作为单个数据帧打开?

  • 其次,假设我可以单独读取所有文件,如何一次性完成所有这些数据帧的功能。例如,我创建了四个小数据框,以便我可以说明我想要的内容:

     Df.1 <- data.frame(A = c(5,4,7,6,8,4),B = (c(1,5,2,4,9,1)))
    Df.2 <- data.frame(A = c(1:6),B = (c(2,3,4,5,1,1)))
    Df.3 <- data.frame(A = c(4,6,8,0,1,11),B = (c(7,6,5,9,1,15)))
    Df.4 <- data.frame(A = c(4,2,6,8,1,0),B = (c(3,1,9,11,2,16)))
  • 我还编写了一个示例函数:

    Summary<-function(dfile){
    SumA<-sum(dfile$A)
    MinA<-min(dfile$A)
    MeanA<-mean(dfile$A)
    MedianA<-median(dfile$A)
    MaxA<-max(dfile$A)

    sumB<-sum(dfile$B)
    MinB<-min(dfile$B)
    MeanB<-mean(dfile$B)
    MedianB<-median(dfile$B)
    MaxB<-max(dfile$B)

    Sum<-c(sumA,sumB)
    Min<-c(MinA,MinB)
    Mean<-c(MeanA,MeanB)
    Median<-c(MedianA,MedianB)
    Max<-c(MaxA,MaxB)
    rm(sumA,sumB,MinA,MinB,MeanA,MeanB,MedianA,MedianB,MaxA,MaxB)

    Label<-c("A","B")
    dfile_summary<-data.frame(Label,Sum,Min,Mean,Median,Max)
    return(dfile_summary)}

    我通常会使用以下命令将该函数应用于每个单独的数据帧。

    Df1.summary<-Summary(dfile)

    有没有一种方法可以不将该函数应用于所有数据帧,而是使用汇总表中数据帧的标题(即 Df1.summary)。

    非常感谢,

    凯蒂

    最佳答案

    相反,我确实认为使用 list 可以轻松实现此类操作的自动化。

    这是一种解决方案(我将您的四个数据帧存储在文件夹 temp/ 中)。

    filenames <- list.files("temp", pattern="*.csv", full.names=TRUE)
    ldf <- lapply(filenames, read.csv)
    res <- lapply(ldf, summary)
    names(res) <- substr(filenames, 6, 30)

    存储文件的完整路径非常重要(就像我对 full.names 所做的那样),否则您必须粘贴工作目录,例如

    filenames <- list.files("temp", pattern="*.csv")
    paste("temp", filenames, sep="/")

    也会起作用。请注意,我使用 substr 来提取文件名,同时丢弃完整路径。

    您可以按如下方式访问汇总表:

    > res$`df4.csv`
    A B
    Min. :0.00 Min. : 1.00
    1st Qu.:1.25 1st Qu.: 2.25
    Median :3.00 Median : 6.00
    Mean :3.50 Mean : 7.00
    3rd Qu.:5.50 3rd Qu.:10.50
    Max. :8.00 Max. :16.00

    如果您确实想要获取单独的汇总表,可以稍后提取它们。例如,

    for (i in 1:length(res))
    assign(paste(paste("df", i, sep=""), "summary", sep="."), res[[i]])

    关于读取文件夹中的所有文件并将函数应用于每个数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9564489/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com