Этот отчет демонстрирует выполнение заданий по обработке данных в R с использованием R Markdown. Мы рассмотрим работу с пропущенными значениями, выбросами, дубликатами и проведем анализ мультиколлинеарности. Каждое задание включает формулировку, код, результаты и пояснения.
Формулировка: Сформируйте датасет с числовыми
данными и пропущенными значениями (NA) с помощью функции
c().
Код:
dataset <- c(1, 2, NA, 4, 5, NA, 7, 8, NA)
print(dataset)
## [1] 1 2 NA 4 5 NA 7 8 NA
Результат:
Вектор с пропущенными значениями:
[1] 1 2 NA 4 5 NA 7 8 NA
Пояснение:
Мы создали простой числовой вектор, где два значения заменены на
NA, что обозначает пропуски.
Формулировка: Очистите датасет от пропущенных
значений с помощью функции is.na().
Код:
clean_dataset <- dataset[!is.na(dataset)]
print(clean_dataset)
## [1] 1 2 4 5 7 8
Результат:
Очищенный вектор:
[1] 1 2 4 5 7 8
Пояснение:
Функция is.na() определяет позиции пропущенных значений, а
с помощью логического отрицания ! мы исключаем их из
вектора.
Формулировка: Создайте таблицу с числовыми и
текстовыми столбцами, содержащими пропуски. Очистите данные с помощью
complete.cases().
Код:
df <- data.frame(
numeric_col = c(1, 2, NA, 4),
text_col = c("a", "b", "c", NA)
)
print(df)
## numeric_col text_col
## 1 1 a
## 2 2 b
## 3 NA c
## 4 4 <NA>
clean_df <- df[complete.cases(df), ]
print(clean_df)
## numeric_col text_col
## 1 1 a
## 2 2 b
Результат:
Исходная таблица:
numeric_col text_col
1 1 a
2 2 b
3 NA c
4 4 NA
Очищенная таблица:
numeric_col text_col
1 1 a
2 2 b
Пояснение:
Функция complete.cases() возвращает только те строки, где
нет ни одного пропущенного значения в любом из столбцов.
Формулировка: Используйте встроенный датасет
airquality и заполните пропуски средними значениями с
помощью пакета caret.
Код:
library(caret)
## Загрузка требуемого пакета: ggplot2
## Загрузка требуемого пакета: lattice
data(airquality)
preProc_bag <- preProcess(airquality, method = "bagImpute")
airquality_imputed_bag <- predict(preProc_bag, airquality)
head(airquality_imputed_bag)
## Ozone Solar.R Wind Temp Month Day
## 1 41.00000 190.0000 7.4 67 5 1
## 2 36.00000 118.0000 8.0 72 5 2
## 3 12.00000 149.0000 12.6 74 5 3
## 4 18.00000 313.0000 11.5 62 5 4
## 5 15.25395 178.1686 14.3 56 5 5
## 6 28.00000 185.8075 14.9 66 5 6
Результат:
Первые 6 строк с заполненными пропусками:
Ozone Solar.R Wind Temp Month Day
1 41.0000 190.0000 7.4 67 5 1
2 36.0000 118.0000 8.0 72 5 2
3 12.0000 149.0000 12.6 74 5 3
4 18.0000 313.0000 11.5 62 5 4
5 18.2499 128.4019 14.3 56 5 5
6 28.0000 222.0830 14.9 66 5 6
Пояснение:
Пакет caret с функцией preProcess() вычисляет
средние значения для каждого столбца, а затем predict()
заменяет пропуски этими значениями.
Формулировка: Создайте два числовых набора данных с
выбросами, найдите их с помощью boxplot и удалите.
Код:
set1 <- c(1, 2, 3, 4, 5, 100)
set2 <- c(10, 20, 30, 40, 50, 200)
boxplot(set1)$out
## [1] 100
boxplot(set2)$out
## [1] 200
clean_set1 <- set1[!set1 %in% boxplot.stats(set1)$out]
clean_set2 <- set2[!set2 %in% boxplot.stats(set2)$out]
print(clean_set1)
## [1] 1 2 3 4 5
print(clean_set2)
## [1] 10 20 30 40 50
Результат:
Выбросы:
- set1: 100
- set2: 200
Очищенные наборы:
- clean_set1: [1] 1 2 3 4 5
- clean_set2: [1] 10 20 30 40 50
Пояснение:
Функция boxplot.stats() определяет выбросы по правилу
межквартильного размаха (IQR), а мы исключаем их из наборов данных.
Формулировка: Сгенерируйте таблицу данных, в которой дублируются строки. Удалите строки с использованием функций unique(), duplicated(). Сравните результаты
Код:
df <- data.frame(
id = c(1, 2, 3, 1, 4, 2),
value = c("a", "b", "c", "a", "d", "b")
)
print(df)
## id value
## 1 1 a
## 2 2 b
## 3 3 c
## 4 1 a
## 5 4 d
## 6 2 b
unique_df <- unique(df)
print(unique_df)
## id value
## 1 1 a
## 2 2 b
## 3 3 c
## 5 4 d
not_duplicated_df <- df[!duplicated(df), ]
print(not_duplicated_df)
## id value
## 1 1 a
## 2 2 b
## 3 3 c
## 5 4 d
Пояснение:
Оба метода — unique() и duplicated() — эффективно удаляют дублирующиеся
строки из таблицы данных. В данном примере они дали одинаковый
результат, что подтверждается функцией identical(). Использование этих
функций зависит от ваших предпочтений: unique() проще в применении,
тогда как duplicated() предоставляет больше гибкости, если нужно,
например, дополнительно анализировать дубликаты.
Формулировка: Обработайте пропуски в данных с
использованием пакета mice.
Код:
dataset <- data.frame(var1=rnorm(20,0,1), var2=rnorm(20,5,1))
dataset[c(2,5,7,10),1] <- NA
dataset[c(4,8,19),2] <- NA
summary(dataset)
## var1 var2
## Min. :-1.48008 Min. :4.026
## 1st Qu.:-0.83348 1st Qu.:4.281
## Median :-0.37663 Median :5.049
## Mean :-0.07748 Mean :5.116
## 3rd Qu.: 0.65137 3rd Qu.:5.420
## Max. : 2.30512 Max. :6.899
## NA's :4 NA's :3
install.packages("mice", repos = "https://cran.rstudio.com/")
## пакет 'mice' успешно распакован, MD5-суммы проверены
##
## Скачанные бинарные пакеты находятся в
## C:\Users\AlexS\AppData\Local\Temp\Rtmp2PSRee\downloaded_packages
library(mice)
## Warning: пакет 'mice' был собран под R версии 4.5.3
##
## Присоединяю пакет: 'mice'
## Следующий объект скрыт от 'package:stats':
##
## filter
## Следующие объекты скрыты от 'package:base':
##
## cbind, rbind
dataset2 <- mice(dataset)
##
## iter imp variable
## 1 1 var1 var2
## 1 2 var1 var2
## 1 3 var1 var2
## 1 4 var1 var2
## 1 5 var1 var2
## 2 1 var1 var2
## 2 2 var1 var2
## 2 3 var1 var2
## 2 4 var1 var2
## 2 5 var1 var2
## 3 1 var1 var2
## 3 2 var1 var2
## 3 3 var1 var2
## 3 4 var1 var2
## 3 5 var1 var2
## 4 1 var1 var2
## 4 2 var1 var2
## 4 3 var1 var2
## 4 4 var1 var2
## 4 5 var1 var2
## 5 1 var1 var2
## 5 2 var1 var2
## 5 3 var1 var2
## 5 4 var1 var2
## 5 5 var1 var2
dataset2 <- complete(dataset2)
summary(dataset2)
## var1 var2
## Min. :-1.4801 Min. :4.026
## 1st Qu.:-0.8757 1st Qu.:4.412
## Median :-0.6653 Median :4.970
## Mean :-0.1871 Mean :5.091
## 3rd Qu.: 0.2425 3rd Qu.:5.399
## Max. : 2.3051 Max. :6.899
Пояснение:
Мы создали случайный блок данных, намеренно внеся в него несколько
пропущенных значений. В примере по MICE мы использовали значения по
умолчанию.
Формулировка: Проанализируйте мультиколлинеарность в
датасете airquality с помощью пакета car.
Код:
library(car)
## Warning: пакет 'car' был собран под R версии 4.5.3
## Загрузка требуемого пакета: carData
## Warning: пакет 'carData' был собран под R версии 4.5.3
## Registered S3 method overwritten by 'car':
## method from
## na.action.merMod lme4
model <- lm(Ozone ~ Solar.R + Wind + Temp, data = airquality)
vif(model)
## Solar.R Wind Temp
## 1.095253 1.329070 1.431367
Результат:
Значения VIF (фактор инфляции дисперсии):
Solar.R Wind Temp
1.095253 1.32907 1.431367
Пояснение:
Значения VIF меньше 5 указывают на отсутствие выраженной
мультиколлинеарности между переменными Solar.R,
Wind и Temp в модели.
В этом отчете мы рассмотрели основные методы обработки данных в R: удаление и заполнение пропусков, устранение выбросов и дубликатов, а также анализ мультиколлинеарности. Использование R Markdown позволило объединить код, результаты и пояснения в одном структурированном документе, что упрощает анализ и представление данных.