-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path1. Vectors, matrices.R
More file actions
179 lines (119 loc) · 6.99 KB
/
1. Vectors, matrices.R
File metadata and controls
179 lines (119 loc) · 6.99 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
##### Переменные и векторы #####
# Переменная = одна ячейка, сохраняющая информацию
x <- 5
x
# Можно, конечно, и так, но стрелочка выглядит круче)))
x = 5
x
# Но одна переменная для одного числа - это слишком неудобно.
# Чтобы сохранить набор значений в 1 переменную, мы создаем вектор
# Создадим вектор со значением возраста для 10 респондентов. Функция с() - для создания вектора
age <- c(18,24,54,42,42,13,27,59,33,60)
age
# Вектор = последовательность любого количества однотипных данных
# Потому ранее созданный х - это тоже вектор
# Обратите внимание: чем больше пробелов и абзацев, тем скрипт понятнее.
# Заботьтеся о себе наперед - оформляйте код красивенько и пишите комментарии))
# Как добавлять объекты?
# Попробуем объединить age и х:
x <- c(x, age)
x
# Обратите внимание на панель Environment - x уже не тот, что был раньше
# Но что, если нам нужно узнать значение возраста какого-то определенного респондента? Например, девятого?
# Используем оператор [ ]
age[9]
# Магия)
# А если пятого и седьмого? Для этого снова понадобится функция с()
age[c(5,7)]
# Возраст всех с 1-го по 5-го:
age[1:5]
# А теперь проверим есть ли значения меньше 18
age < 18
# Обратите внимание на результат - получилось не то, что хотелось.
# Кстати, логические переменные на самом деле = 0 для FALSE и 1 для TRUE
# Потому если мы просуммируем, узнаем сколько TRUE у нас в векторе
sum(age < 18)
# Но чтобы извлечь всех <18 нужно:
age[age<18]
# А все старше 25:
age[age>25]
# или так
age[!age<27]
# Чтобы создать переменную (age25), где будут все респонденты старше 25:
age25 <- age[age>25]
### Проверьте себя: ######
# создайте вектор vector
# Со значениями от 23 до 67 и от 45 до 79
# узнайте значения под номерами 15, 19 и 22-26
# Извлеките все значения больше 30 и меньше 40 в переменную vector2
###### Типы шкал в R #########
# Есть три основных типа шкал:
# 1. numeric (integer - целые числа) = метрическая
# 2. factor = любая неметрическая шкала
# 3. ordered factor = упорядоченная неметрическая шкала
# Давайте попробуем создать вектор - пол 10 респондентов
# Не забывайте про "" или про '' (для R это одно и то же)
# В RStudio можно поставить "" постфактум - выделите переменную (двойной клик по слову) и нажмите "
# То же самое работает и со скобками
gender <- c("male", "female", "female", "male",
"female", "male" , "male", "female",
"male", "male")
# Определим тип вектора:
class(gender)
# Чтобы создать факторную переменную:
gender <- factor(gender)
gender
class(gender)
# Обратите внимание, что у фактора два уровня - по количеству оригинальных вариантов ответа
# Это удобно (особенно когда мы работаем с массивом данных)
# А теперь давайте узнаем сколько мужчин и женщин в массиве. Построим одномерную таблицу:
table(gender)
### Проверьте себя - создайте факторную переменную fac1
# со значениями ("ready", "go", "ready ", "go")
# Сколько вышло уровней? Почему?
##### Упорядоченные данные #####
# Создадим еще один вектор - состояние здоровья
status <- c('healthy', 'recovering', 'healthy', 'healthy', 'ill',
'ill','healthy', 'healthy', 'ill','recovering')
# У этой переменной 3 уровня, которые можно выстроить в логическом порядке, что и сделаем:
status <- factor(status, order = TRUE, # упорядочиваем
levels = c( 'ill', 'recovering', 'healthy')) # показываем порядок (от меньшего к большему)
# Если мы не укажем порядок, упорядочит в алфавитном порядке
# Любопытное:
# status[1] > status[2]
# Догадаетесь что будет?
# Чтобы из фактора получить количественную переменную:
unclass(status)
##### Пропущенные значения = NA #####
# Модифицируем вектор х чтобы были NA
x[15] <- 57 # 1
x
x <- c(x, NA) # 2
x
# Попытайтесь определить что мы сделали в каждом из случаев
# Как определить есть ли пропущенные значения:
is.na(gender)
is.na(x)
# Как узнать СКОЛЬКО пропущенных значений в векторе х??
###### Матрицы #########
# Следующий тип представления данных = матрица
# Матрица всегда состоит из набора чисел
# По сути своей матрицы = векторы с измерением
# Есть много способов создать матрицу
# 1:
m <- matrix(nrow = 2, ncol = 3)
m
# А так создать матрицу с числами
m1 <- matrix(1:6, nrow = 2, ncol = 3)
m1
# Узнать измерения (сколько строк и сколько столбцов)
# ВСЕГДА сначала строки, потом столбцы!!!
dim(m1)
# 2:
m2 <- 1:10 # заметьте, что в этом случае можно обойтись без с()
dim(m2) <- c(2,5)
# 3 (лично мне встречался чаще всего)
x3 <- 1:3
y3 <- 16:18
m3.1 <- cbind(x3,y3) # связать колонками
m3.2 <- rbind(x3,y3) # связать строками