【问题标题】:Read multiple files to run analysis on each file and store them in a file in r studio读取多个文件以对每个文件运行分析并将它们存储在 r studio 中的一个文件中
【发布时间】:2019-01-02 17:51:10
【问题描述】:

我有 6 个文件夹,每个文件夹包含 2200 个 CSV 文件,我知道如何将它们全部读取到一个文件中并创建一个联合数据集,但问题是我需要对每个文件应用统计函数,然后存储这些值(从具有该文件名称的每个文件中获取)到另一个文件中。因为我只需要分析每个文件的第 5 列和第 6 列,并计算这些列和每个文件的标准偏差、均值、方差、偏度和峰度。 那么我的数据集将是具有第一列中所有文件名称的文件,Std dev 为第二列,mean 为第三列,依此类推。

我无法通过循环分析(查找第 5 列和第 6 列的统计参数)单 2 文件。如果有人能帮我解决这个问题,那对我很有帮助。

【问题讨论】:

  • 那么实际的问题是什么?只需使用类似lapply(list_of_files, function(x) { df <- read.csv(x)[, 5:6]; # Calculate summary stats and store in output file })

标签: r loops csv for-loop dataframe


【解决方案1】:

在这里扩展我上面的评论是一个最小的可重现示例。

当您读入 CSV 文件时,您应该会得到一个 data.frames 列表。由于您不提供示例数据(或可重现的最小示例),因此让我们生成 2 个data.frames 的list 作为示例数据。

set.seed(2017)
lst <- replicate(2, data.frame(x1 = rnorm(10), x2 = rnorm(10), x3 = rnorm(10)), simplify = F)

我们现在定义一个计算所需汇总统计数据的函数。 R 包moments 提供了计算偏度和峰度的函数。

library(moments)
calc.sum.stats <- function(x) c(
    Std.Dev = sd(x),
    Mean = mean(x),
    Var = var(x),
    Skew = skewness(x),
    Kur = kurtosis(x))

我们现在使用lapply 循环遍历data.frames 的list,并将calc.sum.stats 应用于每个data.frame 的第2 列和第3 列。我们将输出存储在一个新的list;或者,您可以将输出写入新文件。

lst.out <- lapply(lst, function(x) sapply(x[, 2:3], calc.sum.stats))
lst.out
#[[1]]
#                 x2          x3
#Std.Dev 1.096376114  0.99908334
#Mean    0.001866057 -0.01558136
#Var     1.202040583  0.99816751
#Skew    0.195200696  0.25926229
#Kur     1.545595827  2.75636328
#
#[[2]]
#                 x2          x3
#Std.Dev  0.89417725  1.19341132
#Mean     0.11378986 -0.01771822
#Var      0.79955296  1.42423058
#Skew    -0.05177617  0.08220936
#Kur      1.45491801  1.72107415

【讨论】:

    猜你喜欢
    • 2016-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-14
    • 1970-01-01
    • 1970-01-01
    • 2018-04-29
    • 2019-06-18
    相关资源
    最近更新 更多