如何遍历目录中的所有文件,以将每个文件的平均值平均到一个数据框中?

时间:2019-07-31 14:44:19

标签: r for-loop directory average rbind

我的路径/目录中大约有100个文件。我的目标是遍历所有这些文件,并具有一个包含所有这些文件的名称和相应平均值的单个输出数据帧或文件。

提示:所有文件都命名为城市

Aberdeen
New York
Spain
Milan
Delhi
Etc

library(data.table) 
setwd("C:/Users/jt/Desktop/zzz/weatherdata")
files <- list.files(path = "C:/Users/jt/Desktop/zzz/weatherdata",pattern = ".csv")
temp <- lapply(files, fread, sep=",")
data <- rbindlist( temp )

如您所见,我试图将所有这些作为一个数据帧调用

每个文件中都有信息:

> data
        date_time maxtempC mintempC totalSnow_cm sunHour uvIndex uvIndex
    1: 2018-01-11        5        3            0     5.8       2       2
    2: 2018-01-12        7        3            0     5.8       2       2
    3: 2018-01-13        6        5            0     1.8       2       2
    4: 2018-01-14        6        4            0     1.8       2       2
    5: 2018-01-15        7        2            0     5.8       2       2

我想编写一个循环,遍历此目录中的每个文件,计算出这些值的平均值(最高温度,最低温度,星期日等),并将其附加到一个包含这些城市的所有名称及其名称的文件中这些标头各自的平均值。有没有办法可以在R中完成?

1 个答案:

答案 0 :(得分:0)

一个选项是

library(data.table)     
rbindlist(lapply(files, function(x) fread(x)[, 
    lapply(.SD, mean), .SDcols = -1][, city := .sub("\\.csv$", "", x)][])

另一个选项是tidyverse

library(tidyverse)
imap_dfr(files, ~ fread(.x) %>%
                summarise_if(is.numeric, mean)%>%
                mutate(city = .y))