R循环执行多个csv文件的功能

时间:2016-04-15 19:29:43

标签: r csv

我尝试创建一个for循环,为4个类似于此但具有更多文件的csv文件执行某些操作。

dat1<- read.csv("female.csv", header =T)
dat2<- read.csv("male.csv", header =T)

for (i in 1:2) {
  message("Female, Male")
  Temp <- dat[i][(dat[i]$NAME == "Temp"), ]
  Temp <- Temp[complete.cases(Temp)]
  print(mean(Temp$MEAN))

然而,我收到错误:

  

Temp $ MEAN出错:$运算符对原子向量无效

不确定为什么这不起作用。循环访问csv文件可以获得任何帮助!

1 个答案:

答案 0 :(得分:0)

就个人而言,我认为最简单的方法是使用plyr包:

library(plyr)
myFiles <- c("male.csv", "female.csv")
dat <- ldply(myFiles, read.csv)
dat <- dat[complete.cases(dat), ]
mean(dat$MEAN)

这种方法的工作方式是首先创建一个文件名向量。然后ldply()函数在文件名向量上执行函数read.csv(),并自动将输出转换为data.frame。然后以通常的方式执行complete.cases()和mean()。

编辑:

但是如果你想要每个文件的平均值,那么这是一种方法:

# create a vector of files
myFiles <- c("male.csv", "female.csv")  

# create a function that properly handles ONLY ONE ELEMENT
readAndCalc <- function(x){            # pass in the filename
   tmp <- read.csv(x)                  # read the single file
   tmp <- tmp[complete.cases(tmp), ]   # complete.cases()
   mean(tmp$MEAN)                      # mean
}

x <- "male.csv"
readAndCalc(x)                         # test with ONE file

sapply(myFiles, readAndCalc)           # run with all your files

这种方法的工作方式是首先创建一个文件名向量,就像之前一样。然后创建一个一次只处理一个文件的函数。然后,您可以使用刚刚创建的readAndCalc函数测试该函数是否有效。最后使用sapply()函数为所有文件执行此操作。希望有所帮助。