-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy path01_dataframe_tibble.qmd
More file actions
131 lines (92 loc) · 1.96 KB
/
01_dataframe_tibble.qmd
File metadata and controls
131 lines (92 loc) · 1.96 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
# So sánh data frame và tibble
```{r}
#| message: false
library(dplyr)
library(knitr)
opts_chunk$set(
message = FALSE
)
d <- data.frame(
a = c(1, 0, 1, 0, 0),
b = seq(5)
)
d
```
## Tên hàng
Trong khi data frame có tên hàng, tibble không có.
```{r}
rownames(d) <- c("a", "b", "c", "d", "e")
d
```
```{r}
d_tib <- tibble(d)
d_tib
```
Muốn thêm tên hàng cho tibble, chúng ta tạo một cột mới.
```{r}
d_tib <- tibble(tibble::rownames_to_column(d, "id"))
d_tib
```
Cũng vì lí do này, data frame có thể slice theo tên hàng, còn tibble thì không.
```{r}
d[c("a", "b"), ]
```
```{r}
d_tib %>% filter(id %in% c("a", "b"))
```
## Slice cột
Để truy cập vào dữ liệu của một cột trong data frame, chúng ta có những cách sau.
```{r}
d$a
```
```{r}
d[, "a"]
```
```{r}
d[, c("a")]
```
Những cách này trả về vector nếu chỉ slice một cột. Muốn giữ nguyên định dạng data frame (gọi là subset), chúng ta làm như sau.
```{r}
d["a"]
```
Thêm một cặp ngoặc vuông nữa, bạn cũng sẽ lấy được vector giá trị của cột.
```{r}
d[["a"]]
```
Slicing bằng giá trị chuỗi kí tự của tên cột thuận lợi cho lập trình.
```{r}
col_name <- "a"
d[[col_name]]
```
Đối với tibble, slicing luôn trả về subset.
```{r}
d_tib["a"]
```
```{r}
d_tib[, "a"]
```
```{r}
d_tib[, c("a")]
```
Để lấy vector, bạn có thể dùng các cách sau.
```{r}
d_tib$a
```
```{r}
d_tib[["a"]]
```
```{r}
d_tib %>% pull(a)
```
Do vậy, muốn lập trình với tibble, bạn có thể làm như sau.
```{r}
d_tib[[col_name]]
```
Hoặc
```{r}
d_tib %>% pull(!!rlang::sym(col_name))
```
Tương tự, nếu muốn subset, bạn có thể làm như trên với hàm `select()`.
```{r}
d_tib %>% select(!!rlang::sym(col_name))
```