从一个文件到大量文件导入数据的差异

时间:2016-01-19 22:49:14

标签: r

我已经构建了一个允许我逐个处理.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个文件的这些结果,前面是每个文件的名称。我是新手,所以我非常感谢你帮助我的时间!

1 个答案:

答案 0 :(得分:0)

您是否考虑过将所有.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()有更好的方法可以做到这一点,但我不想让你感到压力。