Автоматически вычисляя среднее значение и значение st dev для кратных кадров данных и исключая первый столбец в каждом
Я принципиально новичок в R, но мне нужно подготовить несколько сюжетов для моей диссертации.
Я работаю с гиперспектральными данными, для которых я экспортировал csvs, содержащие группы сканов. Я взял сотни чтений, и даже когда спектры сгруппированы, это создает много отдельных файлов CSV.
В каждом csv ось x находится в первом столбце, а каждый следующий столбец содержит интенсивности для независимых спектров. количество столбцов зависит от количества сканирований в этой группе.
Я пытаюсь создать новые столбцы в каждом кадре данных, которые соответствуют среднему и St Dev.
Я также хотел бы создать еще один фрейм данных, который вытягивает новые столбцы среднего и st dev и помещает их в новый фрейм данных.
1 ответ
Без воспроизводимого примера невозможно протестировать приведенный ниже код, но я бы сделал что-то в этом роде.
old_dir <- setwd("path/to/dir")
filenames <- list.files(pattern = "\\.csv")
df_list <- lapply(filenames, read.csv)
df_list <- lapply(df_list, function(DF){
DF[["Mean"]] <- rowMeans(DF[-1], na.rm = TRUE)
DF[["StdErr"]] <- apply(DF[-1], 1, sd, na.rm = TRUE)
DF
})
new_list <- lapply(df_list, function(DF){
data.frame(Mean = DF[["Mean"]], StdErr = DF[["StdErr"]])
})
setwd(old_dir)
Обратите внимание, что new_list
это объект класса "list"
, Вы просите новый data.frame
со средствами и SD. Если исходные файлы не имеют одинаковое количество столбцов и строк, это невозможно.