【问题标题】:Differences in imported data from one file vs. lots of files从一个文件导入数据与从大量文件导入数据的差异
【发布时间】:2016-04-25 14:44:42
【问题描述】:

我已经构建了一个函数,可以让我一个一个地处理 .csv 文件。这包括使用 read.csv 函数导入数据,为其中一列指定名称,并基于该列进行一系列计算。但是,我在如何将此功能应用于整个文件文件夹时遇到问题。生成文件列表后,我是否需要从我的函数中读取每个文件的数据,还是在应用它之前?这是我之前导入数据的内容:

AllData <- read.csv("filename.csv", header=TRUE, skip=7)
DataForCalcs <- Data[5]

我的代码计算了许多变量,我将它们放入代码末尾的矩阵中,并使用 apply 函数计算每个变量的最大值。

NewVariables <- matrix(c(Variable1, Variable2, Variable3, Variable4, Variable5)
colnames(NewVariables <- c("Variable1", "Variable2", "Variable3", Variable4", "Variable5")
apply(NewVariables, 2, max, na.rm=TRUE)

这很好用,但是我需要将此表写入一个新的 .csv 文件,该文件包含我要处理的大约 300 个文件中的每一个的这些结果,前面是每个文件的名称。我是新手,非常感谢您抽出宝贵时间帮助我!

【问题讨论】:

  • rbind(df,u)替换bind(df,u)

标签: r


【解决方案1】:

您是否考虑过在一个循环中读取所有 .csv 文件,将它们组合到一个数据帧中?我一直都这样:

df <- c()
for (x in list.files(pattern="*.csv")) {
  u<-read.csv(x, skip=6)
  u$Label = factor(x) #A column that is the filename
  df <- rbind(df,u)
}

这当然假设每个 .csv 文件都有相同数量的列名称相同。但如果该假设成立,那么您可以简单地将生成的数据帧视为一个数据帧。

如果您输入了数据框,您可以使用标签列作为您的分组变量。此外,您只需要选择第 5 个和第 13 个变量以及标签变量。然后,如果您的目标是获取每个 .csv 文件的最大值和最大值并生成这些最大值的另一个数据框,那么您可以这样进行。

library(dplyr)

df.summary <- df %>%
group_by(Label) %>%
summarise_each(funs(max)) ##Take the max value of each column except Label

使用gather() 有更好的方法来做到这一点,但我不想让你不知所措。

【讨论】:

  • 我没有考虑过,但是我的数据在每个文件中组织了6行无用数据,列标题在第7行。文件名标识的列到底是什么意思?
  • 这很容易处理。我进行了编辑以跳过前 6 行。抱歉,$Label 列只是由文件名组成的 id 列。这可能会有所帮助。
  • 谢谢。那么你的代码的结果是什么?我最终会将我的所有数据整理成一列吗?我不太明白。如果它们都结合在一起,我还可以计算我导入的每个 csv 文件的最大值吗?
  • 这取决于您开始使用的列数。如果您在每个 .csv 文件中有一列数据,那么您的组合文件具有相同的数据。如果每次读取特定目录中的所有 .csv 文件并将它们附加到底部,则所有这些代码都会执行。
  • 嗯,这并不是我所追求的最大值,我的函数有望计算出大约 30 个向量的数据,我想找到每个向量的最大值。功能也挺大的,这个方法能搞定吗?每个文件大约有 10 列数据,但我只对其中的一两列感兴趣来计算我的输出。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-30
  • 1970-01-01
  • 2015-03-17
  • 1970-01-01
  • 1970-01-01
  • 2021-03-21
相关资源
最近更新 更多