我有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")
我无法计算所有三个文件中数学列的平均值。
像这样我需要计算三个文件中的所有三个主题。 任何帮助????
答案 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