Вводное занятие по R.
5 + 12
## [1] 17
25 - 16
## [1] 9
40 - 123
## [1] -83
3 * 5
## [1] 15
45 / 5
## [1] 9
var1 <- 42
var2 <- 35.25
var1
## [1] 42
var2
## [1] 35.25
var1 + 100
## [1] 142
var1 + var2 - 12
## [1] 65.25
var3 <- var1^2 + var2^2
var3
## [1] 3006.562
var3 > 200
## [1] TRUE
var3 > 3009
## [1] FALSE
var1 == var2
## [1] FALSE
var1 != var2
## [1] TRUE
var3 >= 200
## [1] TRUE
var3 <= 200
## [1] FALSE
new_var <- var1 == var2
new_var
## [1] FALSE
Создать вектор от 1 до 67
1:67
## [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
## [24] 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
## [47] 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
Записать вектор от 1 до 67 в переменную
vector1 <- 1:67
vector1
## [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
## [24] 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
## [47] 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
Создать вектор с произвольными числами
vector2 <- c(-32, 45, 67, 12.78, 129, 0, -65)
Обращение к отдельным элементам вектора
vector1[1] # обращение к первому элементу вектора vector1
## [1] 1
vector1[3] # обращение к третьему элементу вектора vector1
## [1] 3
vector2[c(1,2,3)] # обращение к первому, второму и третьему элементам вектора vector2
## [1] -32 45 67
vector2[1:3] # обращение к элементам с первого по третий вектора vector2
## [1] -32 45 67
vector2[c(1,5,6,7,10)] # элемента №10 в векторе vector2 нет, поэтому выводится NA
## [1] -32 129 0 -65 NA
Манипуляции с векторами
vector1 + 10 # увеличение вектора vector1 на 10 (каждое значение вектора увеличивается на 10)
## [1] 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
## [24] 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
## [47] 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
vector2 + 56
## [1] 24.00 101.00 123.00 68.78 185.00 56.00 -9.00
vector2 == 0 # проверка каждого элемента вектора на равенство с нулём (результат - вектор с логическими значениями)
## [1] FALSE FALSE FALSE FALSE FALSE TRUE FALSE
vector1 > 30 # сравнение каждого элемента вектора с 30 (результат - вектор с логическими значениями)
## [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [12] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [23] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE
## [34] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [45] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [56] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [67] TRUE
x <- 23 # тоже самое с переменными
x == 23
## [1] TRUE
vector2 > 0
## [1] FALSE TRUE TRUE TRUE TRUE FALSE FALSE
vector2[vector2 > 0] #обращение только к тем элементам вектора, которые больше 0
## [1] 45.00 67.00 12.78 129.00
vector2[vector2 < 0] #обращение только к тем элементам вектора, которые меньше 0
## [1] -32 -65
vector2[vector2 == 0] #обращение только к тем элементам вектора, которые равны 0
## [1] 0
vector1[vector1 > 20 & vector1 < 30] #обращение только к тем элементам вектора, которые соответствуют сразу двум условиям
## [1] 21 22 23 24 25 26 27 28 29
vector1[vector1 > 60 | vector1 < 10] #обращение только к тем элементам вектора, которые соответствуют хотя бы одному из двух условий
## [1] 1 2 3 4 5 6 7 8 9 61 62 63 64 65 66 67
numbers <- vector1[vector1 > 20 & vector1 < 30]
positive_numbers <- vector2[vector2 > 0]
v1 <- c(165, 178, 180, 181, 167, 178, 187, 167, 187)
mean_v1 <- mean(v1) # среднее значения для элементов вектора v1
mean_v1
## [1] 176.6667
v1[v1 > mean_v1] # отобрать только элементы вектора v1, которые больше среднего значения
## [1] 178 180 181 178 187 187
greater_than_mean <- v1[v1 > mean_v1]
greater_than_mean
## [1] 178 180 181 178 187 187
Создадим набор данных из 4 переменных. Для этого сначала создадим 4 переменные.
name <- c('Виктор', 'Олег', 'Анна', 'Елена', 'Мария')
sex <- c('male', 'male', 'female', 'female', 'female')
age <- c(17, 18, 22, 20, 21)
R_group <- c(T, F, T, T, F)
Теперь объединим их в единый набора данных (матрица данных, dataframe)
data <- data.frame(Name=name, Sex=sex, Age=age, R_fan=R_group) # создадим data frame из этих переменных
str(data) # посмотрим на структуру
## 'data.frame': 5 obs. of 4 variables:
## $ Name : Factor w/ 5 levels "Анна","Виктор",..: 2 5 1 3 4
## $ Sex : Factor w/ 2 levels "female","male": 2 2 1 1 1
## $ Age : num 17 18 22 20 21
## $ R_fan: logi TRUE FALSE TRUE TRUE FALSE
data # посмотрим на сами данные
## Name Sex Age R_fan
## 1 Виктор male 17 TRUE
## 2 Олег male 18 FALSE
## 3 Анна female 22 TRUE
## 4 Елена female 20 TRUE
## 5 Мария female 21 FALSE
Отбор переменны
mean(data$Age) # среднее значение возраста
## [1] 19.6
table(data$Sex) # количество мужчин и женщин (частота значений категориальной переменной)
##
## female male
## 3 2
male <- subset(data, Sex == 'male') # выбрать только мужчин
male
## Name Sex Age R_fan
## 1 Виктор male 17 TRUE
## 2 Олег male 18 FALSE
names_only <- data[,1] # выбрать только переменную с именами
names_only
## [1] Виктор Олег Анна Елена Мария
## Levels: Анна Виктор Елена Мария Олег
Viktor_only <- data[1,] # выбрать значения всех переменных только для Виктора
Viktor_only
## Name Sex Age R_fan
## 1 Виктор male 17 TRUE
data[1,2] # выбрать конкретную ячейку
## [1] male
## Levels: female male
Для того, чтобы открывать данные разных форматов, нужно скачать и активировать пакет foreign. Чтобы скачать пакет, воспользуйтесь командой install.packages().
#install.packages('foreign')
require(foreign)
## Loading required package: foreign
.txt format
mtcars_from_desktop <- read.table("mtcars_data.txt", header = TRUE)
str(mtcars_from_desktop)
## 'data.frame': 32 obs. of 11 variables:
## $ mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
## $ cyl : int 6 6 4 6 8 6 8 4 4 6 ...
## $ disp: num 160 160 108 258 360 ...
## $ hp : int 110 110 93 110 175 105 245 62 95 123 ...
## $ drat: num 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
## $ wt : num 2.62 2.88 2.32 3.21 3.44 ...
## $ qsec: num 16.5 17 18.6 19.4 17 ...
## $ vs : int 0 0 1 1 0 1 0 1 1 1 ...
## $ am : int 1 1 1 0 0 0 0 0 0 0 ...
## $ gear: int 4 4 4 3 3 3 3 4 4 4 ...
## $ carb: int 4 4 1 1 2 1 4 2 2 4 ...
summary(mtcars_from_desktop)
## mpg cyl disp hp
## Min. :10.40 Min. :4.000 Min. : 71.1 Min. : 52.0
## 1st Qu.:15.43 1st Qu.:4.000 1st Qu.:120.8 1st Qu.: 96.5
## Median :19.20 Median :6.000 Median :196.3 Median :123.0
## Mean :20.09 Mean :6.188 Mean :230.7 Mean :146.7
## 3rd Qu.:22.80 3rd Qu.:8.000 3rd Qu.:326.0 3rd Qu.:180.0
## Max. :33.90 Max. :8.000 Max. :472.0 Max. :335.0
## drat wt qsec vs
## Min. :2.760 Min. :1.513 Min. :14.50 Min. :0.0000
## 1st Qu.:3.080 1st Qu.:2.581 1st Qu.:16.89 1st Qu.:0.0000
## Median :3.695 Median :3.325 Median :17.71 Median :0.0000
## Mean :3.597 Mean :3.217 Mean :17.85 Mean :0.4375
## 3rd Qu.:3.920 3rd Qu.:3.610 3rd Qu.:18.90 3rd Qu.:1.0000
## Max. :4.930 Max. :5.424 Max. :22.90 Max. :1.0000
## am gear carb
## Min. :0.0000 Min. :3.000 Min. :1.000
## 1st Qu.:0.0000 1st Qu.:3.000 1st Qu.:2.000
## Median :0.0000 Median :4.000 Median :2.000
## Mean :0.4062 Mean :3.688 Mean :2.812
## 3rd Qu.:1.0000 3rd Qu.:4.000 3rd Qu.:4.000
## Max. :1.0000 Max. :5.000 Max. :8.000
# ?read.table # см справку про функцию read.table
SPSS format (*.sav)
mtcars_from_spss <- read.spss("my_mtcars.sav", use.value.labels = F, to.data.frame = T, use.missings = T)
## Warning in read.spss("my_mtcars.sav", use.value.labels = F, to.data.frame
## = T, : my_mtcars.sav: Unrecognized record type 7, subtype 18 encountered in
## system file
str(mtcars_from_spss)
## 'data.frame': 32 obs. of 12 variables:
## $ cars: Factor w/ 32 levels "AMC Javelin ",..: 18 19 5 13 14 31 7 21 20 22 ...
## $ mpg : Factor w/ 25 levels "10.4","13.3",..: 16 16 19 17 13 12 3 20 19 14 ...
## $ cyl : num 6 6 4 6 8 6 8 4 4 6 ...
## $ disp: Factor w/ 27 levels "108 ","120.1",..: 8 8 1 11 18 10 18 7 5 9 ...
## $ hp : num 110 110 93 110 175 105 245 62 95 123 ...
## $ drat: Factor w/ 22 levels "2.76","2.93",..: 16 16 15 5 6 1 7 11 17 17 ...
## $ wt : Factor w/ 29 levels "1.513","1.615",..: 9 12 7 16 18 19 21 15 13 18 ...
## $ qsec: Factor w/ 30 levels "14.5 ","14.6 ",..: 6 10 22 24 10 29 5 27 30 19 ...
## $ vs : num 0 0 1 1 0 1 0 1 1 1 ...
## $ am : num 1 1 1 0 0 0 0 0 0 0 ...
## $ gear: num 4 4 4 3 3 3 3 4 4 4 ...
## $ carb: num 4 4 1 1 2 1 4 2 2 4 ...
## - attr(*, "variable.labels")= Named chr "" "Miles/(US) gallon" "Number of cylinders" "Displacement (cu.in.)" ...
## ..- attr(*, "names")= chr "cars" "mpg" "cyl" "disp" ...
## - attr(*, "codepage")= int 65001
summary(mtcars_from_spss)
## cars mpg cyl disp
## AMC Javelin : 1 10.4 : 2 Min. :4.000 275.8 : 3
## Cadillac Fleetwood : 1 15.2 : 2 1st Qu.:4.000 160 : 2
## Camaro Z28 : 1 19.2 : 2 Median :6.000 167.6 : 2
## Chrysler Imperial : 1 21 : 2 Mean :6.188 360 : 2
## Datsun 710 : 1 21.4 : 2 3rd Qu.:8.000 108 : 1
## Dodge Challenger : 1 22.8 : 2 Max. :8.000 120.1 : 1
## (Other) :26 (Other):20 (Other):21
## hp drat wt qsec vs
## Min. : 52.0 3.07 : 3 3.44 : 3 17.02 : 2 Min. :0.0000
## 1st Qu.: 96.5 3.92 : 3 3.57 : 2 18.9 : 2 1st Qu.:0.0000
## Median :123.0 2.76 : 2 1.513 : 1 14.5 : 1 Median :0.0000
## Mean :146.7 3.08 : 2 1.615 : 1 14.6 : 1 Mean :0.4375
## 3rd Qu.:180.0 3.15 : 2 1.835 : 1 15.41 : 1 3rd Qu.:1.0000
## Max. :335.0 3.9 : 2 1.935 : 1 15.5 : 1 Max. :1.0000
## (Other):18 (Other):23 (Other):24
## am gear carb
## Min. :0.0000 Min. :3.000 Min. :1.000
## 1st Qu.:0.0000 1st Qu.:3.000 1st Qu.:2.000
## Median :0.0000 Median :4.000 Median :2.000
## Mean :0.4062 Mean :3.688 Mean :2.812
## 3rd Qu.:1.0000 3rd Qu.:4.000 3rd Qu.:4.000
## Max. :1.0000 Max. :5.000 Max. :8.000
##
# ?read.spss # см справку про функцию read.spss
Проверка загрузки данных
head(mtcars_from_desktop, 3) # посмотреть первые 3 наблюдения
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
## Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
tail(mtcars_from_desktop) # посмотреть посление наблюдения
## mpg cyl disp hp drat wt qsec vs am gear carb
## Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.7 0 1 5 2
## Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.9 1 1 5 2
## Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.5 0 1 5 4
## Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.5 0 1 5 6
## Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.6 0 1 5 8
## Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.6 1 1 4 2
Манипулиции с переменными
mtcars$mpg
## [1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2
## [15] 10.4 10.4 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4
## [29] 15.8 19.7 15.0 21.4
summary(mtcars$mpg)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 10.40 15.42 19.20 20.09 22.80 33.90
mtcars$kml <- 0.425143707 * mtcars$mpg # from 'mpg-US' to 'km/l'
mtcars$kml
## [1] 8.928018 8.928018 9.693277 9.098075 7.950187 7.695101 6.079555
## [8] 10.373506 9.693277 8.162759 7.567558 6.972357 7.354986 6.462184
## [15] 4.421495 4.421495 6.249612 13.774656 12.924369 14.412372 9.140590
## [22] 6.589727 6.462184 5.654411 8.162759 11.606423 11.053736 12.924369
## [29] 6.717271 8.375331 6.377156 9.098075
mtcars$number <- 1:nrow(mtcars)
mtcars$number
## [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
## [24] 24 25 26 27 28 29 30 31 32
nrow(mtcars) # количество строк (наблюдений)
## [1] 32
ncol(mtcars) # количество столбиков (переменных)
## [1] 13
Отбор части данных
mtcars$mpg[1:10] # показать только первые 10 значений переменной mpg
## [1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2
mtcars[1,1] # показать значение из первого столбика и первой строки
## [1] 21
mtcars[c(2,10,30),1] # показать только 2, 10 и 30 значения из столбика 1
## [1] 21.0 19.2 19.7
mtcars[10:20,1] # показать с 10 по 20 значения из столбика 1
## [1] 19.2 17.8 16.4 17.3 15.2 10.4 10.4 14.7 32.4 30.4 33.9
mtcars[5,] # показать ряд № 5
## mpg cyl disp hp drat wt qsec vs am gear carb
## Hornet Sportabout 18.7 8 360 175 3.15 3.44 17.02 0 0 3 2
## kml number
## Hornet Sportabout 7.950187 5
mtcars[,1] # показать строку № 1
## [1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2
## [15] 10.4 10.4 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4
## [29] 15.8 19.7 15.0 21.4
Отбор части данных с помощью условия
mtcars$cyl
## [1] 6 6 4 6 8 6 8 4 4 6 6 8 8 8 8 8 8 4 4 4 4 8 8 8 8 4 4 4 8 6 8 4
mtcars$cyl == '6'
## [1] TRUE TRUE FALSE TRUE FALSE TRUE FALSE FALSE FALSE TRUE TRUE
## [12] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [23] FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE
head(subset(mtcars, cyl == '6'))
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
## Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
## Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
## Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4
## Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4
## kml number
## Mazda RX4 8.928018 1
## Mazda RX4 Wag 8.928018 2
## Hornet 4 Drive 9.098075 4
## Valiant 7.695101 6
## Merc 280 8.162759 10
## Merc 280C 7.567558 11
head(subset(mtcars, mpg > 20))
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
## Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
## Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
## Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2
## Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2
## kml number
## Mazda RX4 8.928018 1
## Mazda RX4 Wag 8.928018 2
## Datsun 710 9.693277 3
## Hornet 4 Drive 9.098075 4
## Merc 240D 10.373506 8
## Merc 230 9.693277 9