Правки - я удалил предыдущее письмо, чтобы показать свои правки, и если вы можете мне помочь
Я хочу начать цикл for, который пройдет все 332 случая Справочника, выберет значения нитратов или сульфатов и возьмет среднее из этих значений.
Я подумал, как сделать это индивидуально, однако, этот метод потребует много времени для написания. Как я могу реализовать это в цикл? пожалуйста, просто укажите мне направление, не давая полного ответа.
specdata <- list.files(getwd(), pattern="*.csv")
directory <- lapply(specdata, read.csv)
name_1 <- get("nitrate", envir = as.environment(directory[[1]]))
name_2 <- na.omit(name_1)
name_3 <- name_2[1:122]
pollutantmean <- function(directory, pollutant, id = 1:332) {
for( ?) {
???
}
??????
}
Я прошел другой метод. Это включало удаление выбранных столбцов (сульфат и дата), оставляя только нитрат и идентификатор. Затем я опустил значения NA, и теперь ID подсчитывает каждое значение нитрата для 332 случаев. Мой следующий шаг - решить, как я собираюсь выбирать идентификатор по целому числу, а не по строке. например, если I print(final_df$ID[1:32])
, то он возвращает только целочисленные значения первых 32 строк, а не первых 32 случаев, то есть 1, 2, 3 ... 32 (ранее это было 1, 1, 1 .. .1 поскольку список большой, а первые 1000 равны 1, 2000 - это 2, и т. Д., Они не являются точными)
После этого я могу выбрать значения нитратов (числовые) по каждому значению идентификатора (целое число) и найти среднее между этими значениями. Как мне это сделать?
Данные примерно такие
Data Sulphate Nitrate ID
10/10/10 0.576 0.784 1
10/10/10 0.738 0.687 1
. . . .
. . . .
11/11/11 0.954 1.093 2
. . . .
. . . .
. . . .
13/13/13 0.495 0.586 332
final_df$date <- NULL
final_df$Sulphate <- NULL
Пока код выглядит так
specdata <- list.files(getwd(), pattern="*.csv")
directory <- lapply(specdata, read.csv)
directory_final <- do.call(rbind, directory)
one <- select(directory, nitrate:ID) a <- select(directory, sulfate, ID)
two <- na.omit(two) b <- na.omit(a)
three <- filter(two, ID %in% 1:30) c <- filter(b, ID %in% 1:30)
four <- mean(two$nitrate) d <- mean(c$sulfate)
Он работает так, что может извлекать значения, которые мне могут понадобиться, однако в долгосрочной перспективе это очень непрактично. Мне пришлось создать 8 частей кода, чтобы получить среднее из списка целых чисел, принадлежащих либо к сульфату, либо к нитрату. И если мне нужен другой набор значений, мне нужно будет вернуться к трем и с, чтобы изменить эти значения, а затем повторить четыре и д. Я буду работать над тем, как включить их в один список, который может извлечь среднее из этих целочисленных значений для сульфата или нитрата в одном коде. Я ожидаю, что создание функции будет необходимо, поэтому любые советы приветствуются!