Олеся Волченко
2 сентября 2021
В качестве языка НАСТОЯТЕЛЬНО рекомендую выбрать английский.
Работать в Rstudio cloud - https://rstudio.cloud/
Функция в R имеет форму functionname(x,y,z)
где x, y и z - аргументы функции Например, функция sum()
## [1] 25
Мы будем работать с векторами, факторами и Data frame
## [1] 1 2 3
## [1] 1 1 1 1 1 1 1 1 1 1
## [1] 1 2 3 4 5
## [1] 1 2 3 4 5
А можно даже так:
## [1] yes no yes maybe maybe no maybe no no
## Levels: maybe no yes
f1 <- factor(c("yes","no","yes","maybe","maybe","no","maybe","no","no"),
levels = c("no", "maybe", "yes"), ordered = T)
f1## [1] yes no yes maybe maybe no maybe no no
## Levels: no < maybe < yes
name <- c("Masha", "Vasya", "Anya", "Petya", "Vanya")
age <- c(18, 17, 19, 21, 20)
weight <- c(45, 80, 69, 92, 60)
height <- c(1.62, 1.75, 1.82, 1.92, 1.70)
gender <- c("F", "M", "F", "M", "M")
course <- c(1, 1, 2, 3, 4)
students <- data.frame(name, age, weight, height, gender, course)
students## name age weight height gender course
## 1 Masha 18 45 1.62 F 1
## 2 Vasya 17 80 1.75 M 1
## 3 Anya 19 69 1.82 F 2
## 4 Petya 21 92 1.92 M 3
## 5 Vanya 20 60 1.70 M 4
Переменная целиком (нужно знать название переменной)
## [1] "F" "M" "F" "M" "M"
Значение из конкретной ячейки (в данном случае первая строка, первый столбец):
## [1] "Masha"
Первая строка целиком:
## name age weight height gender course
## 1 Masha 18 45 1.62 F 1
Первый столбец целиком:
## [1] "Masha" "Vasya" "Anya" "Petya" "Vanya"
head() — выводим первые 6 строк базы данных
tail() — выводим последние 6 строк базы данных
Рабочая директория – папка, где R по умолчанию ищет и сохраняет файлы
## [1] "/Users/olesyavolchenko/Yandex.Disk.localized/teaching/DA MA 2021/lec 1 intro to R"
Желательно, чтобы директория не содержала в себе киррилических символов
C:/Desktop/Maша - вот так плохо
C:/Desktop/Masha - вот так хорошо
Проверяем, есть ли файл ESS5e03.sav в рабочей директории при помощи dir()
## [1] "basic_R_eng.html"
## [2] "garold.jpg"
## [3] "lec1.html"
## [4] "lec1.Rmd"
## [5] "ropewalker.jpg"
## [6] "rsconnect"
## [7] "screen1.png"
## [8] "str.png"
## [9] "WVS_Wave_7_Russian_Federation_Spss_v1.4.sav"
library(foreign)
ESS <- read.spss("/Users/olesyavolchenko/Desktop/ESS5e03_4.sav", use.value.labels=T, to.data.frame=T)
dim(ESS)## [1] 52458 674
#install.packages("dplyr") # Устанавливаем пакет dplyr
library(dplyr)
ESS1 <- select(ESS, c("eduyrs", "agea", "agertr", "gndr",
"icmnact", "facntr", "mocntr", "impfun"))Если хотите узнать, что это за переменные - смотрите codebook https://www.europeansocialsurvey.org/docs/round5/survey/ESS5_appendix_a6_e01_0.pdf.
## [1] 52458 8
## eduyrs agea agertr gndr icmnact facntr mocntr impfun
## 1 15 22 <NA> Male All others No No Somewhat like me
## 2 15 43 <NA> Male In paid work No No Like me
## 3 13 19 <NA> Female All others Yes Yes Like me
## 4 15 23 <NA> Female In paid work Yes No Somewhat like me
## 5 15 58 60 Female All others Yes Yes Like me
## 6 13 62 60 Female Retired Yes Yes Not like me
## eduyrs agea agertr gndr icmnact facntr mocntr impfun
## 52453 16 65 50 Female All others Yes Yes Somewhat like me
## 52454 11 72 60 Male Retired Yes Yes A little like me
## 52455 10 57 55 Female All others Yes Yes Not like me
## 52456 14 44 45 Female <NA> No Yes Somewhat like me
## 52457 9 23 <NA> Male In paid work Yes Yes Somewhat like me
## 52458 8 72 <NA> Female Retired Yes Yes Not like me at all
## [1] "eduyrs" "agea" "agertr" "gndr" "icmnact" "facntr" "mocntr"
## [8] "impfun"
## Rows: 52,458
## Columns: 8
## $ eduyrs <fct> 15, 15, 13, 15, 15, 13, 17, 13, 12, 12, 12, 7, 12, 10, 11, 14…
## $ agea <fct> 22, 43, 19, 23, 58, 62, 26, 40, 48, 68, 72, 70, 56, 63, 16, 5…
## $ agertr <fct> NA, NA, NA, NA, 60, 60, NA, NA, 58, 61, 59, 60, 60, 55, NA, 6…
## $ gndr <fct> Male, Male, Female, Female, Female, Female, Male, Male, Male,…
## $ icmnact <fct> All others, In paid work, All others, In paid work, All other…
## $ facntr <fct> No, No, Yes, Yes, Yes, Yes, Yes, Yes, Yes, Yes, Yes, Yes, Yes…
## $ mocntr <fct> No, No, Yes, No, Yes, Yes, Yes, Yes, Yes, Yes, Yes, Yes, Yes,…
## $ impfun <fct> Somewhat like me, Like me, Like me, Somewhat like me, Like me…
## 'data.frame': 52458 obs. of 8 variables:
## $ eduyrs : Factor w/ 45 levels "0","1","2","3",..: 16 16 14 16 16 14 18 14 13 13 ...
## $ agea : Factor w/ 88 levels "14","15","16",..: 9 30 6 10 45 49 13 27 35 55 ...
## $ agertr : Factor w/ 77 levels "0","1","2","5",..: NA NA NA NA 45 45 NA NA 43 46 ...
## $ gndr : Factor w/ 2 levels "Male","Female": 1 1 2 2 2 2 1 1 1 1 ...
## $ icmnact: Factor w/ 3 levels "In paid work",..: 3 1 3 1 3 2 1 1 1 2 ...
## $ facntr : Factor w/ 2 levels "Yes","No": 2 2 1 1 1 1 1 1 1 1 ...
## $ mocntr : Factor w/ 2 levels "Yes","No": 2 2 1 2 1 1 1 1 1 1 ...
## $ impfun : Factor w/ 6 levels "Very much like me",..: 3 2 2 3 2 5 2 2 2 2 ...
Поработаем с переменной “количество лет образования”
Давайте представим, что нам нужны не конкретные значения, а интервалы. Например, мы хотим разделить респондентов на три группы:
## [1] "factor"
ESS1$eduyrs <- as.numeric(as.character(ESS1$eduyrs)) #меняем тип переменной, чтобы с ней можно было выполнять математические действия
ESS1$eduyrs3[ESS1$eduyrs <= 10] <- "<11"
ESS1$eduyrs3[ESS1$eduyrs > 10 & ESS1$eduyrs <= 16] <- "11-16"
ESS1$eduyrs3[ESS1$eduyrs > 16] <- "17+"
summary(ESS1$eduyrs3)## Length Class Mode
## 52458 character character
## <11 11-16 17+ NA's
## 14776 29772 7281 629
Представим, что мы хотим из переменной с 6 категориями получить переменную с тремя категориями.
impfun - Important to seek fun and things that give pleasure
## Very much like me Like me Somewhat like me A little like me
## 6303 13650 12619 9198
## Not like me Not like me at all NA's
## 6570 2791 1327
##
## Very much like me Like me Somewhat like me A little like me
## 6303 13650 12619 9198
## Not like me Not like me at all
## 6570 2791
ESS1$impfun3 <- dplyr::recode(ESS1$impfun, "Very much like me" = 3,
"Like me" = 3, "Somewhat like me" = 2, "A little like me" = 2, "Not like me" = 1,
"Not like me at all" = 1)
table(ESS1$impfun3)##
## 1 2 3
## 9361 21817 19953
##
## Very much like me Like me Somewhat like me A little like me Not like me
## 1 0 0 0 0 6570
## 2 0 0 12619 9198 0
## 3 6303 13650 0 0 0
##
## Not like me at all
## 1 2791
## 2 0
## 3 0
Визуализируем распределение новой переменной
разница между возрастом респондента и идеальным возрастом выхода на пенсию по его/ее мнению
ESS1$agertr <- as.numeric(as.character(ESS1$agertr))
ESS1$agea <- as.numeric(as.character(ESS1$agea))
ESS1$diff <- ESS1$agertr - ESS1$ageaВизуализируем распределение новой переменной (гистограмма)
Мы считаем респондента мигрантом второго поколения в том случае, если кто-то из его родителей родился за пределами страны, в которой респондент проживает сейчас.
переменные: facntr - Father born in [country]
mocntr - Mother born in [country]
## [1] "Yes" "No"
## [1] "Yes" "No"
Интересно, как для работающих людей связаны возраст и идеальный (по их мнению) возраст выхода на пенсию?
Что нужно?
Отберем только тех респондентов, которые работают на оплачиваемой работе
## [1] All others In paid work Retired <NA>
## Levels: In paid work Retired All others
## In paid work Retired All others NA's
## 24049 14055 14220 134
## [1] 24049 12
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 5.00 58.00 60.00 60.49 63.00 120.00 14918
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 15.00 33.00 43.00 42.59 52.00 88.00 71
Отличается ли медианный возраст планируемого выхода на пенсию для женщин и мужчин?