Нахождение среднего значения столбца в наборе данных R с помощью циклов FOR для удаления отсутствующих значений - PullRequest
1 голос
/ 20 сентября 2019

У меня есть набор данных с данными о качестве воздуха.Фрейм данных представляет собой матрицу из 153 строк и 5 столбцов.Я хочу найти среднее значение первого столбца в этом фрейме данных.В столбце отсутствуют значения, поэтому я хочу исключить их при поиске среднего значения.И, наконец, я хочу сделать это, используя управляющие структуры (для циклов и циклов if-else)

Я попытался написать код, как показано ниже.Я создал 'y' вместо фактического набора данных о качестве воздуха, чтобы получить воспроизводимый пример.

y <- c(1,2,3,NA,5,6,NA,NA,9,10,11,NA,13,NA,15)
x <- matrix(y,nrow=15)

for(i in 1:15){
   if(is.na(data.frame[i,1]) == FALSE){
   New.Vec <- c(x[i,1])
   }
}
print(mean(New.Vec))

Я ожидал, что результат будет средним.Хотя я получил следующую ошибку:

Ошибка: объект 'New.Vec' не найден

Ответы [ 3 ]

3 голосов
/ 20 сентября 2019

Одна строка кода, для цикла нет необходимости.

mean(data.frame$name_of_the_first_column, na.rm = TRUE)

Установка na.rm = TRUE заставляет функцию среднего значения игнорировать NA с.

2 голосов
/ 20 сентября 2019

Здесь мы можем использовать na.aggregate из zoo

library(zoo)
df1[] <- na.aggregate(df1)

Предполагая, что 'df1' - это data.frame со всеми числовыми столбцами и требуется заполнить элементы NAсоответствующий mean этого столбца.na.aggregate, по умолчанию имеют fun.aggregate как mean

1 голос
/ 20 сентября 2019

не может видеть ваши данные, но, вероятно, так?вектор необходимо инициализировать.Лучше избегать петель в R, когда вы можете ...

myDataFrame <- read.csv("hw1_data.csv")

New.Vec <- c()    
for(i in 1:153){
   if(!is.na(myDataFrame[i,1])){
      New.Vec <- c(New.Vec, myDataFrame[i,1])
   }
}
print(mean(New.Vec))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...