Как заполнить строки данных для прогрессивных файлов в цикле for в R - PullRequest
0 голосов
/ 06 июля 2019

Я пытаюсь проанализировать некоторые данные, полученные в ходе экспериментальных испытаний, с записью нескольких переменных.Я импортировал фрейм данных в R и хочу получить некоторую статистическую информацию путем обработки этих данных.В частности, я хочу заполнить пустой фрейм данных теми же именами переменных импортированного фрейма данных, но со статистическими функциями, такими как среднее, медиана, режим, макс, мин и квантили, в качестве строк для каждой переменной.Входные кадры данных имеют размер около 60 столбцов x 250 тыс. Строк в каждом.

Мне уже удалось сделать это, используя apply, как показано в следующих строках кода для одного входного файла.

df[1,] <- apply(mydata,2,mean,na.rm=T)
df[2,] <- apply(mydata,2,sd,na.rm=T)
...

Теперь мне нужно сделать это в цикле for для нескольких входных файлов mydata_1, mydata_2, mydata_3, ..., чтобы построить несколько сводных данных, по одному для каждого входного файла.Я пробовал несколькими разными способами, пытаясь использовать apply и assign, но мне не удалось получить доступ к каждой интересующей строке в выходных фреймах данных, циклически переключаясь между несколькими входными файлами.Я хотел бы сделать что-то вроде приведенного ниже кода (я знаю, что этот код не работает, это просто дать представление о том, что я хочу сделать).Выходные df-кадры данных уже определены и пусты.

for (xx in 1:number_of_mydata_files) {
df_xx[1,]<-apply(mydata_xx,2,mean,na.rm=T)
df_xx[2,]<-apply(mydata_xx,2,sd,na.rm=T)
...
}

На самом деле я не могу вспомнить сообщение об ошибке, данное этим кодом, но проблема в том, что я даже не могу запустить это, потому что он не работает.

Я довольно новичок в R, поэтому у меня нет особого опыта использования этого языка.Есть ли способ сделать это?Существуют ли другие функции, которые можно использовать вместо применения и назначения?) *

РЕДАКТИРОВАТЬ:

Я добавляю здесь простое описание таблицы, которая представляет входные кадры данных, которые яс помощью.Извините за плохую визуализацию данных прямо здесь.В основном входные фреймы данных, которые я использую, представляют собой импортированные файлы .csv, похожие на таблицы, где первая строка представляет собой описание столбца, то есть имя измеряемой переменной, а следующие строки - полученные данные.У меня есть 250 000 записей для каждой переменной в каждом файле, и у меня есть что-то вроде 5-8 файлов, таких как этот, в качестве входных данных.

Current [A] | Force [N] | Elongation [%] | ...
—————————————————————————————————————

Value_a_1 | Value_b_1 | Value_c_1 | ...

Я просто хочу получить фрейм данных, подобный этому, в качестве вывода,с тем же именем переменных, но вместо этого со статистическими значениями в виде строк.Например, первая строка, вместо того, чтобы быть первыми значениями, полученными для каждой переменной, будет средним значением 250 тыс. Приобретений для каждой переменной.Второй ряд будет стандартным отклонением, третий - дисперсией и так далее.Мне удалось создать пустые кадры данных для итоговой статистики, только столбцы и никаких строк.Я просто хочу заполнить их и сделать это итеративно в цикле for.

1 Ответ

1 голос
/ 06 июля 2019

Не уверен, как выглядят ваши данные, но вы можете сделать следующее, где lst представляет ваш список фреймов данных.

lst <- list(iris[,-5],mtcars,airquality)
lapply(seq_along(lst), 
       function(x) sapply(lst[[x]],function(x)
         data.frame(Mean=mean(x,na.rm=TRUE),
                    sd=sd(x,na.rm=TRUE))))

Или как предложено @G. Гротендик просто:

lapply(lst, sapply, function(x) 
data.frame(Mean = mean(x, na.rm = TRUE), sd = sd(x, na.rm = TRUE)))

Если все ваши файлы находятся в одном и том же каталоге, задайте для него рабочий каталог и используйте от list.files() или ls() до walk в качестве входных файлов.

Если они имеют одинаковые имена столбцов, вы можете rbind результат в одном наборе данных.

...