Работа с пропущенными данными

Данные о качестве воздуха

head(airquality)
  Ozone Solar.R Wind Temp Month Day
1    41     190  7.4   67     5   1
2    36     118  8.0   72     5   2
3    12     149 12.6   74     5   3
4    18     313 11.5   62     5   4
5    NA      NA 14.3   56     5   5
6    28      NA 14.9   66     5   6
dim(airquality)
[1] 153   6
mean(airquality$Ozone)
[1] NA

В чем проблема?

Работа с отсутствующими данными

  • NA - пропущенное значение: is.na()
  • NaN - результат недопустимой арифметической операции: is.nan()
  • NULL - отсутствие субъекта: is.null()

Работа с отсутствующими данными

Не учитывать отсутствующие данные

mean(airquality$Ozone, na.rm = T)
[1] 42.12931

Работа с отсутствующими данными

Удалить строки с отсутствующими данными

Удаляется ВСЯ строка!

dim(airquality)
[1] 153   6
air <- na.omit(airquality)
dim(air)
[1] 111   6
mean(air$Ozone)
[1] 42.0991
mean(airquality$Ozone, na.rm = T)
[1] 42.12931

Работа с отсутствующими данными

air <- head(airquality,10)
is.na(air$Ozone)
 [1] FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE
sum(is.na(air$Ozone))
[1] 2
which(is.na(air$Ozone))
[1]  5 10
anyNA(air$Ozone)
[1] TRUE

NaN

0/0
[1] NaN

Удаление столбцов

head(air,3)
  Ozone Solar.R Wind Temp Month Day
1    41     190  7.4   67     5   1
2    36     118  8.0   72     5   2
3    12     149 12.6   74     5   3
air$Ozone = NULL
head(air,3)
  Solar.R Wind Temp Month Day
1     190  7.4   67     5   1
2     118  8.0   72     5   2
3     149 12.6   74     5   3

Списки

Списки 🏠

Можно хранить данные разного типа

L <- list("A",c(1,2),30)
L
[[1]]
[1] "A"

[[2]]
[1] 1 2

[[3]]
[1] 30

Списки 🏠

Можно хранить данные разного типа

L1 <- list(L,40)
L1
[[1]]
[[1]][[1]]
[1] "A"

[[1]][[2]]
[1] 1 2

[[1]][[3]]
[1] 30


[[2]]
[1] 40

Списки 🏠

Добавление нового элемента

L[[4]] <- 'new_element'
L
[[1]]
[1] "A"

[[2]]
[1] 1 2

[[3]]
[1] 30

[[4]]
[1] "new_element"

Списки 🏠

Срезы

L # список из 4 элементов
[[1]]
[1] "A"

[[2]]
[1] 1 2

[[3]]
[1] 30

[[4]]
[1] "new_element"
L[3] # список из 1 элемента
[[1]]
[1] 30
L[[3]] # вектор из 1 элемента
[1] 30

Списки 🏠

L1
[[1]]
[[1]][[1]]
[1] "A"

[[1]][[2]]
[1] 1 2

[[1]][[3]]
[1] 30


[[2]]
[1] 40
L1[[1]]
[[1]]
[1] "A"

[[2]]
[1] 1 2

[[3]]
[1] 30

Списки 🏠

L
[[1]]
[1] "A"

[[2]]
[1] 1 2

[[3]]
[1] 30

[[4]]
[1] "new_element"
L1 [[1]]
[[1]]
[1] "A"

[[2]]
[1] 1 2

[[3]]
[1] 30
L1 [[1]] [[2]]
[1] 1 2

Списки 🏠

L <- list(10,20)
L
[[1]]
[1] 10

[[2]]
[1] 20
L$abc <- 123
L
[[1]]
[1] 10

[[2]]
[1] 20

$abc
[1] 123

Списки 🏠

names(L)
[1] ""    ""    "abc"
L[[3]]
[1] 123
L$abc
[1] 123
L[['abc']]
[1] 123

Базовая графика

Типы данных

Точковая диаграмма

head(mtcars, 2)
              mpg cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4      21   6  160 110  3.9 2.620 16.46  0  1    4    4
Mazda RX4 Wag  21   6  160 110  3.9 2.875 17.02  0  1    4    4
plot(mtcars$mpg, mtcars$hp)

Точковая диаграмма - подписи

plot(mtcars$mpg, mtcars$hp,
     main = 'Точечки',
     xlab = 'Miles/(US) gallon', ylab = 'Gross horsepower')

Точковая диаграмма - цвета, размер

plot(mtcars$mpg, mtcars$hp, cex = 2, pch = 16, col = mtcars$cyl,
     cex.lab = 1.5, cex.axis = 2)

Бобры

x <- beaver1[beaver1$day == 346,]
plot(x$time, x$temp)

Линии

plot(x$time, x$temp, type = 'l')

И точки и линии

plot(x$time, x$temp, type = 'o')

Ирисы

head(iris)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa

Попарные точковые диаграммы

pairs(iris)

Попарные точковые диаграммы - цвета

pairs(iris, col = iris$Species)

Конец!