多个csv文件在循环中读取并计算R中的列平均值

时间:2016-01-04 13:46:43

标签: r

我有3个csv文件,我在所有三个文件(数学,物理和化学)中都有三列,所有学生都有标记。我创建了一个循环来读取所有文件并保存在数据框中,如下所示。在每个文件行中,需要跳过1,2,4,5。

files <- list.files(pattern = ".csv") 

for(i in 1:length(files)){
  data <- read.csv(files[i], header=F, skip=2) # by writing skip=2 I could only skip first two lines. 
  View(data)
  mathavg[i] <- sum(as.numeric(data$math), na.rm=T)/nrow(data)
}

result <- cbind(files,mathavg)
write.csv(result,"result_mathavg.csv")

我无法计算所有三个文件中数学列的平均值。

像这样我需要计算三个文件中的所有三个主题。 任何帮助????

2 个答案:

答案 0 :(得分:1)

这应该有效,

files  <- c("testa.csv","testb.csv","testc.csv")
list_files  <- lapply(files,read.csv,header=F,stringsAsFactors=F)

list_files  <- lapply(list_files, function(x) x[-c(1,2,4,5),])

mathav  <- sapply(list_files,function(x) mean(as.numeric(x[,2]),na.rm=T))
result  <- cbind(files,mathav)
write.csv(result,"result_mathavg.csv",row.names=F)

我无法访问您的文件,因此我编写了三个并将其称为“文件”。我使用lapply函数加载文件,然后删除你不想要的行。我使用了sapply函数得到了平均值,然后我回到你的代码来获得结果等等。

答案 1 :(得分:0)

[]需要先进行初始化,然后才能使用files <- list.files(pattern = ".csv") mathavg<-'' for(i in 1:length(files)){ data <- read.csv(files[i], header=F, skip=2, stringsAsFactors=F) # by writing skip=2 I could only skip first two lines. data<-data[-c(2,3),] mathavg[i] <- mean(as.numeric(data$math), rm.NA=T) ##best to use R's builtin function to calculate the mean } result <- cbind(files,mathavg) write.csv(result,"result_mathavg.csv") 进行操作。要删除第4行和第5行,您只需在读取数据后执行子集操作。如果在读取数据时跳过前两行,则第4行和第5行变为2和3。

anamnesa