R цикл для расчета среднего значения на основе данных из разных наборов данных - PullRequest
0 голосов
/ 13 февраля 2019

Я хотел бы рассчитать среднее значение из 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 голосов
/ 13 февраля 2019

Шаг 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]))
0 голосов
/ 13 февраля 2019

Вы можете попробовать использовать функцию Paste0, чтобы попытаться выполнить ту же функцию, указанную выше

sum_e <-data.frame (0) </p>

q = 1

для (q в 1:10)

{

sum_e <-rbind (sum_e, paste0 ('file _ (', q, ')') [15,2]) </p>

}

сумма_e2 <-сум (сумма_e) </p>

error_m <-сум_e / 10 </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...