如何自动化文件路径以从多个 csv 文件的列中获取平均值?

Posted

技术标签:

【中文标题】如何自动化文件路径以从多个 csv 文件的列中获取平均值?【英文标题】:How to automate file paths to take mean from a column from multiple csv files? 【发布时间】:2021-07-20 00:10:57 【问题描述】:

我有 600 个文件夹,每个文件夹包含两个 .csv 文件,我希望从 LEFT_CHANNEL 中获取平均值并存储在 data.frame

到目前为止,这是我的代码:

H_results <- read.csv("E:/Audiomoth Files/Winter/Urban/Nisha/_1/H_results.csv")
mean_H <- mean(H_results$LEFT_CHANNEL)
ndsi_results <- read.csv("E:/Audiomoth Files/Winter/Urban/Nisha/_1/ndsi_results.csv")
mean_ndsi <- mean(ndsi_results$LEFT_CHANNEL)

data1 <- data.frame(H = mean_H,
                    ndsi = mean_ndsi)

H_results <- read.csv("E:/Audiomoth Files/Winter/Urban/Nisha/_2/H_results.csv")
mean_H <- mean(H_results$LEFT_CHANNEL)
ndsi_results <- read.csv("E:/Audiomoth Files/Winter/Urban/Nisha/_2/ndsi_results.csv")
mean_ndsi <- mean(ndsi_results$LEFT_CHANNEL)

new_row <- c(mean_H, mean_ndsi)
data1 <- rbind(data1, new_row)

这是可行的,但我想找到一种自动化文件路径的方法,这样我就不必每次都复制和粘贴并将文件夹更改为_1, _2, _3

我对 R 完全陌生,并尝试学习,因此非常感谢任何帮助!

谢谢!

【问题讨论】:

【参考方案1】:

也许像下面这样的东西可以解决这个问题。未经测试,因为没有数据。

H_files <- "E:/Audiomoth Files/Winter/Urban/Nisha/_%s/H_results.csv"
ndsi_files <- "E:/Audiomoth Files/Winter/Urban/Nisha/_%s/ndsi_results.csv"
col_name <- "LEFT_CHANNEL"
file_nums <- 1:600

data1 <- lapply(file_nums, function(i)
  fl <- sprintf(H_files, i)
  df <- read.csv(fl)
  mean_H <- mean(df[[col_name]])
  fl <- sprintf(ndsi_files, i)
  df <- read.csv(fl)
  mean_ndsi <- mean(df[[col_name]])
  c(mean_H = mean_H, mean_ndsi = mean_ndsi)
)

data1 <- do.call(rbind.data.frame, data1)

【讨论】:

以上是关于如何自动化文件路径以从多个 csv 文件的列中获取平均值?的主要内容,如果未能解决你的问题,请参考以下文章

如何比较来自多个csv的数据

如何从python中的CSV文件中的列中选择一个随机值?

如何从.csv文件向JTable中的列添加标头

Python:将系列添加到数据框架中,并没有将数据放在正确的列中。

在同一个 CSV 文件中保存多个不同大小的列/变量

使用 pyspark 读取多个 csv 文件