我想计算10个不同文件(每个文件的第15行和第2列)的平均值。
下面的第一个代码正在工作,但是我将不得不根据需要更改行号(例如,不是第15行而是第12行),并且我想对代码进行总结,以便仅更改一个数字。
error_m<-(file_1[15,2] + file_2[15,2] + file_3[15,2] + file_4[15,2] + file_5[15,2] + file_6[15,2] + file_7[15,2] + file_8[15,2] + file_9[15,2] + file_10[15,2])/10
我尝试了下面的代码,但是它不起作用。此错误是file_(q)中的错误:找不到函数“ file_””。
sum_e<-data.frame(0)
q=1
for(q in 1:10)
{
sum_e<-rbind(sum_e,file_(q)[15,2])
}
sum_e2<-sum(sum_e)
error_m<-sum_e/10
答案 0 :(得分:0)
您可以尝试使用Paste0函数尝试执行与上面相同的功能
sum_e <-data.frame(0)
q = 1
for(1:10中的q)
{
sum_e <-rbind(sum_e,paste0('file _(',q,')')[15,2])
}
sum_e2 <-sum(sum_e)
error_m <-sum_e / 10
答案 1 :(得分:0)
第1步:解决当前的问题:
sum_e<-data.frame(0)
q=1
for(q in 1:10)
{
sum_e<-rbind(sum_e,get(paste0("file_",. q))[15,2])
}
sum_e2<-sum(sum_e)
error_m<-sum_e/10
第2步:每个数据的结构相同时,它们没有不同的变量。首先,您应该将它们读入列表,然后将它们作为一个整体进行处理。
allfiles <- list.files(path="...", pattern="*.txt", full.naames=TRUE)
list_of_frames <- lapply(allfiles, read.csv)
在这一点上,list_of_frames
的每个元素正好是您的文件之一,因此您应该能够看到list_of_frames[[1]]
与file_1
相同。从这里开始,只要您想对所有人都执行“某些操作”,就可以对列表执行操作,但是要放在lapply
中,ala:
val_15_2 <- lapply(list_of_frames, function(df) df[15,2])
avg_15_2 <- mean(unlist(val_15_2))
现在这是一个可能会或可能不会立即有用的列表。相反,如果您知道它们都具有相同的大小/形状(相同的长度,相同的类),并且希望将它们简化为向量或矩阵,则可以改用sapply
:
val_15_2 <- sapply(list_of_frames, function(df) df[15,2])
# or even
avg_15_2 <- mean(sapply(list_of_frames, function(df) df[15,2]))