我尝试创建一个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文件可以获得任何帮助!
答案 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()函数为所有文件执行此操作。希望有所帮助。