-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path2.1 Lists, data frames.R
More file actions
186 lines (134 loc) · 7.41 KB
/
Copy path2.1 Lists, data frames.R
File metadata and controls
186 lines (134 loc) · 7.41 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
179
180
181
182
183
184
185
186
############## Еще один вид данных - List (список) ##################
# List - это список из векторов
# У него есть 2 уровня:
# 1 - перечень векторов
# 2 - значения векторов
# длина векторов в списке может быть разная, тип тоже.
# Чтобы создать список:
l1 <- list(c(15, 36, 31, 124),
"a",
TRUE,
1+4i)
# Посмотрите как отображается список во вкладке Environment
# (нажмите на синий кружок со стрелочкой)
# Как обращаться со списком?
# [[эл-ты спискакоторые хотите отобразить]]
# Например:
l1[[1]]
# Можно создать список с названиями векторов:
l2 <- list(x = 5:10,
y = c("a", "b"))
l2
l2[[1]] # показать первый вектор из списка
l2[["x"]] # показать вектор "x" из списка
# [извлечь список с элементом под этим номером]
l2[1] # показать список только с вектором 1
l2$x
# Обратите внимание на последний вариант!
# Знак $ = извлечь колонку из таблицы или вектор из списка с таким названием
# С l2$x можно обращаться как с вектором:
### Проверьте себя ####
# Создайте список l3
# с вектором v1 со значениями от 156 до 140 в обратном порядке
# и вектором v2 со значениями (3, 2, 3, 2, 1, 2, 1, 2, 3)
# 1. Выведите на экран пятое значение вектора v1 из списка
# 2. Превратите вектор v2 в факторную упорядоченную переменную
# 3. Замените в векторе v2 все значения "2" на NA
################## Data frames #######################
# все колонки одинаковой длинны, но (в отличие от матриц) могут быть разного типа
# Матрицу можно превратить в датафрейм:
m1 <- matrix(1:6, nrow = 2, ncol = 3)
t1 <- as.data.frame(m1)
# А можно создать "с чистого листа":
t2 <- data.frame(age = c(18 : 27), # 1 столбик - возраст
status = rep(c(TRUE, FALSE), 5)) # 2 столбик - повторяем вектор c(T,F) 5 раз = функция rep()
t2
# Обратите внимание, что у столбцов есть названия
# Узнать кол-во строк:
nrow(t2)
# Узнать кол-во столбцов:
ncol(t2)
# Можно конвертировать в матрицу:
data.matrix(t1)
class(data.matrix(t1))
# Обратите внимнаие, что в RStudio можно открыть предварительный просмотр таблицы
# Верхнее правое окно (Environment) в строке объекта справа нажать на значок таблицы
# В открывшейся вкладке ничего изменить нельзя, но можно проверить себя -
# понять правильно ли отображается таблица или некоторые переменные
# Другой способ вызвать отображение таблицы:
View(t2)
### Самая важная часть работы с таблицами - извлечение (subseting)
# Сначала давайте создадим таблицу побольше :)
t3 <- data.frame(x = 100:198,
y = rep(c(TRUE,FALSE,TRUE), times = 33),
z = rep(c("Ann", "Helen", "Mark"), each = 33))
nrow(t3)
# Очень полезно когда таблицы большие
# посмотреть первые 6 строк таблицы:
head(t3)
tail(t3) # последние 6 строк
# Посмотреть базовую информацию по таблице:
summary(t3)
str(t3)
# А теперь извлечем значение 55 строки 3 колонки:
t3[55,3]
# 50 строки 1 колонки:
t3[50,1]
# Извлечем колонку y:
t3[,2]
# Или так:
t3$y
# Между этими вариантами есть небольшая разница:
x1 <- "y" # создадим новую переменную
t3[, x1] # здесь мы по сути обращаемся к переменной x1 со значением "y"
t3$x1 # а так не прокатит - столбца с таким названием не сеуществует
# Иногда нужно извлечь данные по условию
# Для этого есть отдельная функция:
subset(t3, # название таблицы / массива
z == "Ann" & y == TRUE) # условие
# Кстати, можно очень быстро создавать новые столбцы
t3$name <- seq(1, 50, by = 0.5)
head(t3)
# Удалить столбик:
t3$example <- 1:99
head(t3)
t3$example <- NULL
head(t3)
# И рассчитывать на основании предыдущих:
t3$name.plus.x <- t3$x + t3$name
head(t3)
# Про более продвинутые и простыe способы работы с таблицами поговорим в следующий раз
### ДЗ: установить пакет "dplyr"
###### Проверьте себя #######
# 1. Создайте таблицу t4 с переменными:
# age = от 20 до 25, повторить 10 раз
# books = rep(rep(1:5, each = 6), times = 2)
# 2. Посчитайте сколько в среднем книг прочитано участниками исследования - функция mean()
# 3. Создайте в таблице новую переменную group
# Которая будет = "good" если книг прочитано больше 3, и "bad" - если 3 и меньше
# 4. Извлеките таблицу, где значение group = "good"
# 5. Посчитайте в новой таблице среднее для переменной age
################## Назначение имен ##################
# Назначение имен вектору
v3 <- 1:3
names(v3) <- c("one", "two", "three")
v3 # проверьте какого класса эта переменная
class(v3) # это все еще вектор, хоть и с именами у каждой переменной
# Назначение имен матрице
m1
dimnames(m1) <- list(c("row1", "row2"), # имена строк
c("column1","column3","column3")) # имена колонок
m1
## Назначение имен таблице
# Можно так же, как и матрице:
t1
dimnames(t1) <- list(c("row1", "row2"), # имена строк
c("column1","column3","column3"))
t1
# А можно с помощью функции:
colnames(t1) <- c("col1","col2","col3")
t1
# Есть и функция
row.names(t1) <- c("r1", "r2")
# Но кто когда присваивает строкам названия в таблицах?))))
### На сегодня всё))))