R循环根据来自不同数据集的数据计算平均值

时间:2019-02-12 23:15:29

标签: r for-loop

我想计算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

2 个答案:

答案 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]))