R Basic
R Basic
Giới thiệu sử dụng R căn bản cho lớp Phân tích định lượng
https://rpubs.com/chuong/1219896
• Trong môn phân tích định lượng, mục tiêu của môn học là xây dựng và nâng cấp các
kỹ năng phân tích dựa trên dữ liệu cho người học. Theo đó, kỳ vọng của môn học là
người học có thể giải quyết tốt các vấn đề trong phân tích kinh tế/kinh doanh dựa trên
các công cụ định lượng. Do đó việc xây dựng kỹ năng phân tích dựa trên các mô hình
định lượng cũng như trực quan hóa các kết quả là bắt buộc. Việc sử dụng các phần
mềm là một phần tất yếu để phân tích, ước lượng và trình bày kết quả. Một số phần
mềm phổ biến được sử dụng như: SPSS, Eviews, Stata, SmartPLS,R,Python,…Trong đó,
phần lớn các phần mềm hiện tại được sử dụng là các phần mềm thương mại, và người
dùng thường lách bằng các cách khác nhau để sử dụng khi không đủ kinh phí mua bản
quyền. Xu hướng hiện nay là sử dụng các phần mềm nguồn mở không chỉ để giải quyết
vấn đề này mà còn dựa trên khả năng mở rộng và sức mạnh của phần mềm mã nguồn
mở. R và Python là 2 phần mềm mã nguồn mở phổ biến nhất trong phân tích định
lượng hiện nay. Có nhiều lợi điểm khi sử dụng 2 phần mềm này, trong đó một số điểm
nổi bật: - Mã nguồn mở: tất cả đều được sử dụng free, tiếp cận dễ dàng không bị rào
cản về chi phí và các rủi ro khi dùng các phần mềm lậu. - Cộng đồng sử dụng lớn: Cộng
đồng sử dụng lớn không chỉ hỗ trợ tốt cho các nhu cầu đa dạng trong phân tích mà còn
tiềm năng phát triển lâu dài cũng như xu hướng yêu cầu kỹ năng nghề nghiệp. - Sức
mạnh: R và Python đều có sức mạnh vượt trội trong phân tích định lượng. Sức mạnh
này tiếp tục được phát triển và mở rộng theo thời gian. - Trực quan hóa dữ liệu: Đây
là điểm mạnh của các phần mềm này so với các phần mềm thương mại được sử dụng
phổ biến hiện nay. - Đa dụng: Có thể sử dụng với nhiều mục đích khác nhau không chỉ
phân tích định lượng.
1
• Trong đó, R và Python tuy ban đầu có tiếp cận tương đối rắc rối và khó hơn các
phần mềm thương mại nhưng khi quen thuộc logic lệnh và cấu trúc thì việc phát
triển là nhanh. Cả 2 phần mềm đều có cấu trúc lệnh và logic tương tự nhau, có
thể chuyển đổi giữa 2 phần mềm không tốn nhiều thời gian. Trong đó, R tập trung
nhiều hơn trong phân tích định lượng, Python có tính đa dụng cao hơn. Trong
khóa học về phân tích định lượng trong Kinh tế, người học được kỳ vọng phát triển
cả tư duy xử lý vấn đề trong kinh tế kinh doanh bằng các mô hình định lượng
và phát kỹ kỹ năng về sử dụng các phần mềm hỗ trợ. Các dữ liệu thông tin của
lớp được chia sẻ tại link của lớp học: https://drive.google.com/drive/u/1/folders/1-
GLHSy2a0ihmoAN0AaFsnQPV_4ivb2A0
• Để bắt đầu sử dụng R, cần cài đặt phần mềm R. Hiện tại phiên bản R mới nhất
là R4.4. Việc sử dụng R sẽ thuận tiện hơn rất nhiều khi sử dụng các môi trường
làm việc với R, tiêu biểu nhất là Rstudio. Cần cài đặt cả 2 phần mềm này để làm
việc với R một cách tối ưu nhất. Link cài đặt tại: https://posit.co/download/rstudio-
desktop/ Lưu ý trong link đã có sẵn hướng dẫn cài đặt. Một số máy tính khi cài
đặt có thể lỗi tải thiếu thì cần cài thêm Rtools tại (hoặc search Rtools trên google):
https://cran.rstudio.com/bin/windows/Rtools/
• Bước 1: Mở R-studio. Nếu lần đầu tiên mở lên, R-studio sẽ tự động quét phần mềm R
có trong máy, nếu chưa có, nó sẽ yêu cầu cài đặt trước R. Nếu đã có R, R-studio sẽ đề
xuất lựa chọn để sử dụng phiên bản R tối ưu. Đừng lo ngại, hãy cứ chọn mặc định.
• Bước 2: Khi mở R-studio, các thiết lập mặc định ban đầu là đủ để sử dụng. Nếu cần cài
đặt thay đổi giao diện và cách trình bày của R-studio thì vào: Tools/Global Options.
• Bước 3: Hãy vào File/NewFile/ Quarto. Để bắt đầu mở 1 file Quarto như file này. File
Quarto Document có thể vừa ghi chú, vừa thực hiện các lệnh và tạo report cũng như
nhiều tính năng khác rất thuận tiện cho việc sử dụng với nhiều mục đích khác nhau.
• Bước 4: Tổng quan các cửa sổ (windows) trong R có 4 nhóm cửa sổ chính: Cửa sổ sử
dụng các file (Quarto, Rmarkdown, Rscript,Data), Cửa sổ Console, Cửa Sổ Plots (và
các phần như Help, Files), Cửa sổ History. Các cửa sổ này đều hiển thị ở mặc định. Khi
mới tiếp cận không cần chỉnh sửa gì với các cửa sổ này, các bạn có thể sử dụng ngay lập
tức.
2
• 2- Để mở khối lệnh trong Quarto, hoặc click vào biểu tượng +c phía bên phải của file,
hoặc gõ theo các ký hiệu khối lệnh:
• 3- Thử kết quả với các tính toán đơn giản và nhấn nút run ở phía bên phải của khối lệnh
2+2
[1] 4
1+2*3-4/5
[1] 6.2
(19465*0.25)^23
[1] 6.389569e+84
5%%2
[1] 1
3
• var(x) The variance - Phương sai
• cor(x,y) Correlation - Tương quan
• sd(x) The standard deviation - Độ lệch chuẩn
• Nếu cần hỗ trợ cấu trúc lệnh hay lênh gì bất kỳ hãy gõ ?lệnh, hoặc ??lệnh Nếu cần tìm
thông tin khác, help.search:
print("Hello world")
[1] 10 20 30 40 50 60 70 80
help.search("regression")
Lệnh Gán
Lệnh gán là 1 phần quan trọng của R, giúp gán tất cả các thành phần dữ liệu, thông tin mà
người phân tích muốn gán tên để sau đó có thể gọi ra và sử dụng. Ví dụ gán biến, dữ liệu, mô
hình, biểu đồ,….
[1] 2
[1] 3
4
x+y # Gọi tên và thực hiện phép tính
[1] 5
[1] "a+b"
[1] TRUE
X <- 1:5
X
[1] 1 2 3 4 5
Y <- letters
Y
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s"
[20] "t" "u" "v" "w" "x" "y" "z"
x <-letters[1:5]
x
5
class(x) # Lệnh biểu thị đặc tính của x
[1] "character"
Ma trận: 2 chiều
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14]
[1,] 1 3 5 7 9 11 13 15 17 19 21 23 25 27
[2,] 2 4 6 8 10 12 14 16 18 20 22 24 26 28
[,15]
[1,] 29
[2,] 30
6
Dữ liệu
Col1 Col2
1 1 100
2 2 99
3 1 98
4 2 97
5 1 96
6 2 95
7 1 94
8 2 93
9 1 92
10 2 91
11 1 90
12 2 89
13 1 88
14 2 87
15 1 86
16 2 85
17 1 84
18 2 83
19 1 82
20 2 81
21 1 80
22 2 79
23 1 78
24 2 77
25 1 76
26 2 75
27 1 74
28 2 73
29 1 72
30 2 71
31 1 70
32 2 69
33 1 68
34 2 67
35 1 66
36 2 65
37 1 64
7
38 2 63
39 1 62
40 2 61
41 1 60
42 2 59
43 1 58
44 2 57
45 1 56
46 2 55
47 1 54
48 2 53
49 1 52
50 2 51
51 1 50
52 2 49
53 1 48
54 2 47
55 1 46
56 2 45
57 1 44
58 2 43
59 1 42
60 2 41
61 1 40
62 2 39
63 1 38
64 2 37
65 1 36
66 2 35
67 1 34
68 2 33
69 1 32
70 2 31
71 1 30
72 2 29
73 1 28
74 2 27
75 1 26
76 2 25
77 1 24
78 2 23
79 1 22
80 2 21
8
81 1 20
82 2 19
83 1 18
84 2 17
85 1 16
86 2 15
87 1 14
88 2 13
89 1 12
90 2 11
91 1 10
92 2 9
93 1 8
94 2 7
95 1 6
96 2 5
97 1 4
98 2 3
99 1 2
100 2 1
Col1 Col2
1 1 1
2 2 2
3 3 3
4 4 4
5 5 5
6 1 6
7 2 7
8 3 8
9 4 9
10 5 10
9
$Truong
[1] "uel"
$Lop
[1] "Quant"
$soluong
[1] 3
$thanhtich
[1] 7 10 2
Các gói thư viện bao gồm nhiều mã lệnh khác nhau có sẵn trong R hoặc phải cài thêm để sử
dụng cho thuận tiện.
Mỗi gói thư viện với các mục đích sử dụng khác nhau. Có thể cùng một mục tiêu có nhiều gói
thư viện khác nhau đều sử dụng được.
Vì R là phần mềm mã nguồn mở nên sự đóng góp của cộng đồng rất lớn và rất đa dạng. Để
sử dụng cần cài đặt gói thư viện và tải vào R trước khi sử dụng (hoặc gọi tên ngay trước khi
dùng lệnh tương ứng).
Trong khóa học này chỉ hướng dẫn các gói thư viện phổ biến và thuận tiện, các bạn có thể sử
dụng nhiều gói thư viện khác nhau để hoàn thành mục tiêu của mình.
Cài đặt thư viện dùng lệnh: install.packages
Sử dụng thư viện dùng lệnh: library(tên thư viện)
Khi R báo lỗi không có thư viện khi bạn sử dụng lệnh trong môn học, cần cài đặt thư viện
trước.
Trong đó, gói “tidyverse” là gói thư viện phổ phiến với rất nhiều thư viện nhỏ để sử dụng đa
mục đích cần cài đặt Để cài đặt hãy gõ install.packages(“tidyverse”) trong cửa sổ console
library(tidyverse)
10
v ggplot2 3.5.1 v tibble 3.2.1
v lubridate 1.9.3 v tidyr 1.3.1
v purrr 1.0.2
-- Conflicts ------------------------------------------ tidyverse_conflicts() --
x dplyr::filter() masks stats::filter()
x dplyr::lag() masks stats::lag()
i Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to becom
# A tibble: 13,300 x 6
CountryName CountryCode year GDP K L
<chr> <chr> <dbl> <dbl> <dbl> <dbl>
1 Afghanistan AFG 1974 NA NA NA
2 Afghanistan AFG 1975 NA NA NA
3 Afghanistan AFG 1976 NA NA NA
4 Afghanistan AFG 1977 NA NA NA
5 Afghanistan AFG 1978 NA NA NA
6 Afghanistan AFG 1979 NA NA NA
7 Afghanistan AFG 1980 NA NA NA
8 Afghanistan AFG 1981 NA NA NA
9 Afghanistan AFG 1982 NA NA NA
10 Afghanistan AFG 1983 NA NA NA
# i 13,290 more rows
dấu %>% nằm trong gói thư viện tidyverse biểu thị lấy kết quả trước để làm cho lệnh sau.
Ví dụ mô tả chung summary
11
library(tidyverse) # tải thư viện vào R
# A tibble: 13,300 x 6
CountryName CountryCode year GDP K L
<chr> <chr> <dbl> <dbl> <dbl> <dbl>
1 Afghanistan AFG 1974 NA NA NA
2 Afghanistan AFG 1975 NA NA NA
3 Afghanistan AFG 1976 NA NA NA
4 Afghanistan AFG 1977 NA NA NA
5 Afghanistan AFG 1978 NA NA NA
6 Afghanistan AFG 1979 NA NA NA
7 Afghanistan AFG 1980 NA NA NA
8 Afghanistan AFG 1981 NA NA NA
9 Afghanistan AFG 1982 NA NA NA
10 Afghanistan AFG 1983 NA NA NA
12
# i 13,290 more rows
readxl::read_xlsx("C:\\Users\\Huynh Chuong\\Desktop\\University\\UEL\\Class_QuantMethods\\202
# A tibble: 798 x 53
`Country Name` `Country Code` `Series Name` `1974` `1975` `1976`
<chr> <chr> <chr> <dbl> <dbl> <dbl>
1 Afghanistan AFG GDP NA NA NA
2 Afghanistan AFG L NA NA NA
3 Afghanistan AFG K NA NA NA
4 Albania ALB GDP NA NA NA
5 Albania ALB L NA NA NA
6 Albania ALB K NA NA NA
7 Algeria DZA GDP 49117415082. 5.16e10 5.59e10
8 Algeria DZA L NA NA NA
9 Algeria DZA K 19508642957. 2.12e10 2.04e10
10 American Samoa ASM GDP NA NA NA
# i 788 more rows
# i 47 more variables: `1977` <dbl>, `1978` <dbl>, `1979` <dbl>, `1980` <dbl>,
# `1981` <dbl>, `1982` <dbl>, `1983` <dbl>, `1984` <dbl>, `1985` <dbl>,
# `1986` <dbl>, `1987` <dbl>, `1988` <dbl>, `1989` <dbl>, `1990` <dbl>,
# `1991` <dbl>, `1992` <dbl>, `1993` <dbl>, `1994` <dbl>, `1995` <dbl>,
# `1996` <dbl>, `1997` <dbl>, `1998` <dbl>, `1999` <dbl>, `2000` <dbl>,
# `2001` <dbl>, `2002` <dbl>, `2003` <dbl>, `2004` <dbl>, `2005` <dbl>, ...
Gán tên
13
[1] "Country Name" "Country Code" "Series Name" "1974" "1975"
[6] "1976" "1977" "1978" "1979" "1980"
[11] "1981" "1982" "1983" "1984" "1985"
[16] "1986" "1987" "1988" "1989" "1990"
[21] "1991" "1992" "1993" "1994" "1995"
[26] "1996" "1997" "1998" "1999" "2000"
[31] "2001" "2002" "2003" "2004" "2005"
[36] "2006" "2007" "2008" "2009" "2010"
[41] "2011" "2012" "2013" "2014" "2015"
[46] "2016" "2017" "2018" "2019" "2020"
[51] "2021" "2022" "2023"
Ghi dữ liệu
Gán tên
14
Tạo và thay đổi biến
WDI %>%
rename(Tenmoi=CountryName)
# A tibble: 13,300 x 6
Tenmoi CountryCode year GDP K L
<chr> <chr> <dbl> <dbl> <dbl> <dbl>
1 Afghanistan AFG 1974 NA NA NA
2 Afghanistan AFG 1975 NA NA NA
3 Afghanistan AFG 1976 NA NA NA
4 Afghanistan AFG 1977 NA NA NA
5 Afghanistan AFG 1978 NA NA NA
6 Afghanistan AFG 1979 NA NA NA
7 Afghanistan AFG 1980 NA NA NA
8 Afghanistan AFG 1981 NA NA NA
9 Afghanistan AFG 1982 NA NA NA
10 Afghanistan AFG 1983 NA NA NA
# i 13,290 more rows
WDI %>%
rename(Country=CountryName)
# A tibble: 13,300 x 6
Country CountryCode year GDP K L
<chr> <chr> <dbl> <dbl> <dbl> <dbl>
1 Afghanistan AFG 1974 NA NA NA
2 Afghanistan AFG 1975 NA NA NA
3 Afghanistan AFG 1976 NA NA NA
4 Afghanistan AFG 1977 NA NA NA
5 Afghanistan AFG 1978 NA NA NA
6 Afghanistan AFG 1979 NA NA NA
7 Afghanistan AFG 1980 NA NA NA
8 Afghanistan AFG 1981 NA NA NA
9 Afghanistan AFG 1982 NA NA NA
10 Afghanistan AFG 1983 NA NA NA
# i 13,290 more rows
15
Tạo biến mới
WDI %>%
mutate(lnY=log(GDP))
# A tibble: 13,300 x 7
CountryName CountryCode year GDP K L lnY
<chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
1 Afghanistan AFG 1974 NA NA NA NA
2 Afghanistan AFG 1975 NA NA NA NA
3 Afghanistan AFG 1976 NA NA NA NA
4 Afghanistan AFG 1977 NA NA NA NA
5 Afghanistan AFG 1978 NA NA NA NA
6 Afghanistan AFG 1979 NA NA NA NA
7 Afghanistan AFG 1980 NA NA NA NA
8 Afghanistan AFG 1981 NA NA NA NA
9 Afghanistan AFG 1982 NA NA NA NA
10 Afghanistan AFG 1983 NA NA NA NA
# i 13,290 more rows
WDI %>%
rename(Country=CountryName) %>% # Đổi tên biến
mutate(lnY=log(GDP),
lnL=log(L)) %>% # Tạo biến
select(Country,year, lnY,L,K) %>% # Chọn biến
filter(year>=1990) -> WDI_data # Lọc quan sát theo điều kiện và lưu thành dữ liệu mới
Ví dụ dữ liệu tải về
Xem dữ liệu
WDI
16
# A tibble: 798 x 53
`Country Name` `Country Code` `Series Name` `1974` `1975` `1976`
<chr> <chr> <chr> <dbl> <dbl> <dbl>
1 Afghanistan AFG GDP NA NA NA
2 Afghanistan AFG L NA NA NA
3 Afghanistan AFG K NA NA NA
4 Albania ALB GDP NA NA NA
5 Albania ALB L NA NA NA
6 Albania ALB K NA NA NA
7 Algeria DZA GDP 49117415082. 5.16e10 5.59e10
8 Algeria DZA L NA NA NA
9 Algeria DZA K 19508642957. 2.12e10 2.04e10
10 American Samoa ASM GDP NA NA NA
# i 788 more rows
# i 47 more variables: `1977` <dbl>, `1978` <dbl>, `1979` <dbl>, `1980` <dbl>,
# `1981` <dbl>, `1982` <dbl>, `1983` <dbl>, `1984` <dbl>, `1985` <dbl>,
# `1986` <dbl>, `1987` <dbl>, `1988` <dbl>, `1989` <dbl>, `1990` <dbl>,
# `1991` <dbl>, `1992` <dbl>, `1993` <dbl>, `1994` <dbl>, `1995` <dbl>,
# `1996` <dbl>, `1997` <dbl>, `1998` <dbl>, `1999` <dbl>, `2000` <dbl>,
# `2001` <dbl>, `2002` <dbl>, `2003` <dbl>, `2004` <dbl>, `2005` <dbl>, ...
Với mục tiêu là dữ liệu phải có dạng Y, X1, X2 để có thể chạy mô hình kinh tế lượng, chúng
ta phải quay dữ liệu tương ứng
Quay dọc: Để giá trị năm thành 1 biến
WDI %>%
pivot_longer(cols= c(-"Country Name",- "Country Code",-"Series Name" )) # Quay dọc trừ các
# A tibble: 39,900 x 5
`Country Name` `Country Code` `Series Name` name value
<chr> <chr> <chr> <chr> <dbl>
1 Afghanistan AFG GDP 1974 NA
2 Afghanistan AFG GDP 1975 NA
3 Afghanistan AFG GDP 1976 NA
4 Afghanistan AFG GDP 1977 NA
5 Afghanistan AFG GDP 1978 NA
6 Afghanistan AFG GDP 1979 NA
7 Afghanistan AFG GDP 1980 NA
8 Afghanistan AFG GDP 1981 NA
9 Afghanistan AFG GDP 1982 NA
10 Afghanistan AFG GDP 1983 NA
# i 39,890 more rows
17
Sau đó quay ngang: để tên biến thành các cột riêng
WDI %>%
pivot_longer(cols= c(-"Country Name",- "Country Code",-"Series Name" )) %>%
pivot_wider(id_cols = c("Country Name", "Country Code", "name"),names_from = c("Series Name
# A tibble: 13,300 x 6
`Country Name` `Country Code` name GDP L K
<chr> <chr> <chr> <dbl> <dbl> <dbl>
1 Afghanistan AFG 1974 NA NA NA
2 Afghanistan AFG 1975 NA NA NA
3 Afghanistan AFG 1976 NA NA NA
4 Afghanistan AFG 1977 NA NA NA
5 Afghanistan AFG 1978 NA NA NA
6 Afghanistan AFG 1979 NA NA NA
7 Afghanistan AFG 1980 NA NA NA
8 Afghanistan AFG 1981 NA NA NA
9 Afghanistan AFG 1982 NA NA NA
10 Afghanistan AFG 1983 NA NA NA
# i 13,290 more rows
WDI %>%
pivot_longer(cols= c(-"Country Name",- "Country Code",-"Series Name" )) %>%
pivot_wider(id_cols = c("Country Name", "Country Code", "name"),names_from = c("Series Name
rename("year"="name")
# A tibble: 13,300 x 6
`Country Name` `Country Code` year GDP L K
<chr> <chr> <chr> <dbl> <dbl> <dbl>
1 Afghanistan AFG 1974 NA NA NA
2 Afghanistan AFG 1975 NA NA NA
3 Afghanistan AFG 1976 NA NA NA
4 Afghanistan AFG 1977 NA NA NA
5 Afghanistan AFG 1978 NA NA NA
6 Afghanistan AFG 1979 NA NA NA
7 Afghanistan AFG 1980 NA NA NA
8 Afghanistan AFG 1981 NA NA NA
9 Afghanistan AFG 1982 NA NA NA
10 Afghanistan AFG 1983 NA NA NA
# i 13,290 more rows
18
Gán tên dữ liệu
WDI %>%
pivot_longer(cols= c(-"Country Name",- "Country Code",-"Series Name" )) %>%
pivot_wider(id_cols = c("Country Name", "Country Code", "name"),names_from = c("Series Name
rename("year"="name") ->WDI_data
Call:
lm(formula = GDP ~ L + K, data = WDI_data)
Residuals:
Min 1Q Median 3Q Max
-9.168e+12 -1.773e+11 -1.637e+11 -7.177e+10 4.533e+12
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.789e+11 9.804e+09 18.25 <2e-16 ***
L -3.125e+03 5.343e+01 -58.49 <2e-16 ***
K 4.631e+00 8.577e-03 539.89 <2e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Call:
lm(formula = log(GDP) ~ log(L) + log(K), data = WDI_data)
19
Residuals:
Min 1Q Median 3Q Max
-1.6020 -0.1687 0.0114 0.1731 4.4288
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 2.604035 0.041035 63.46 <2e-16 ***
log(L) 0.082066 0.003676 22.33 <2e-16 ***
log(K) 0.902241 0.003151 286.34 <2e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Ghép dữ liệu
Xem 2 dữ liệu
D1
# A tibble: 8 x 3
id X1 X2
<dbl> <dbl> <dbl>
1 1 0.762 0.732
2 2 0.555 0.710
3 3 0.118 0.184
4 4 0.0350 0.209
5 5 0.476 0.753
6 6 0.178 0.653
7 7 0.779 0.839
8 10 0.353 0.172
20
D2
# A tibble: 5 x 3
id X3 X4
<dbl> <dbl> <dbl>
1 1 0.0368 0.333
2 2 0.216 0.244
3 8 0.125 0.824
4 9 0.503 0.253
5 10 0.187 0.427
Ghép D2 vào D1
D1 %>%
left_join(D2, by=c("id"))
# A tibble: 8 x 5
id X1 X2 X3 X4
<dbl> <dbl> <dbl> <dbl> <dbl>
1 1 0.762 0.732 0.0368 0.333
2 2 0.555 0.710 0.216 0.244
3 3 0.118 0.184 NA NA
4 4 0.0350 0.209 NA NA
5 5 0.476 0.753 NA NA
6 6 0.178 0.653 NA NA
7 7 0.779 0.839 NA NA
8 10 0.353 0.172 0.187 0.427
Ghép D1 vào D2
D1 %>%
right_join(D2, by=c("id"))
# A tibble: 5 x 5
id X1 X2 X3 X4
<dbl> <dbl> <dbl> <dbl> <dbl>
1 1 0.762 0.732 0.0368 0.333
2 2 0.555 0.710 0.216 0.244
3 10 0.353 0.172 0.187 0.427
4 8 NA NA 0.125 0.824
5 9 NA NA 0.503 0.253
21
Ghép toàn bộ dữ liệu giữ toàn bộ thông tin của D1
D1 %>%
full_join(D2, by=c("id"))
# A tibble: 10 x 5
id X1 X2 X3 X4
<dbl> <dbl> <dbl> <dbl> <dbl>
1 1 0.762 0.732 0.0368 0.333
2 2 0.555 0.710 0.216 0.244
3 3 0.118 0.184 NA NA
4 4 0.0350 0.209 NA NA
5 5 0.476 0.753 NA NA
6 6 0.178 0.653 NA NA
7 7 0.779 0.839 NA NA
8 10 0.353 0.172 0.187 0.427
9 8 NA NA 0.125 0.824
10 9 NA NA 0.503 0.253
D2 %>%
full_join(D1, by=c("id"))
# A tibble: 10 x 5
id X3 X4 X1 X2
<dbl> <dbl> <dbl> <dbl> <dbl>
1 1 0.0368 0.333 0.762 0.732
2 2 0.216 0.244 0.555 0.710
3 8 0.125 0.824 NA NA
4 9 0.503 0.253 NA NA
5 10 0.187 0.427 0.353 0.172
6 3 NA NA 0.118 0.184
7 4 NA NA 0.0350 0.209
8 5 NA NA 0.476 0.753
9 6 NA NA 0.178 0.653
10 7 NA NA 0.779 0.839
Ghép có tên biến xác định khác nhau hoặc nhiều biến xác định
22
D1 <- haven::read_dta("C:\\Users\\Huynh Chuong\\Desktop\\University\\UEL\\Class_QuantMethods\
D2 <- haven::read_dta("C:\\Users\\Huynh Chuong\\Desktop\\University\\UEL\\Class_QuantMethods\
Xem dữ liệu
D1
# A tibble: 10 x 4
id1 id2 X1 X2
<dbl> <dbl> <dbl> <dbl>
1 1 1 0.756 0.802
2 2 2 0.560 0.243
3 3 3 0.789 0.421
4 4 4 0.260 0.747
5 5 5 0.532 0.589
6 6 6 0.349 0.348
7 7 7 0.153 0.292
8 8 8 0.0827 0.745
9 9 9 0.843 0.961
10 10 10 0.166 0.889
D2
# A tibble: 5 x 4
hh1 hh2 X3 X4
<dbl> <dbl> <dbl> <dbl>
1 1 1 0.939 0.799
2 2 2 0.520 0.869
3 8 3 0.483 0.883
4 9 4 0.832 0.125
5 10 5 0.956 0.527
D1 %>%
left_join(D2, by=c("id1"="hh1", "id2"="hh2"))
# A tibble: 10 x 6
id1 id2 X1 X2 X3 X4
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
23
1 1 1 0.756 0.802 0.939 0.799
2 2 2 0.560 0.243 0.520 0.869
3 3 3 0.789 0.421 NA NA
4 4 4 0.260 0.747 NA NA
5 5 5 0.532 0.589 NA NA
6 6 6 0.349 0.348 NA NA
7 7 7 0.153 0.292 NA NA
8 8 8 0.0827 0.745 NA NA
9 9 9 0.843 0.961 NA NA
10 10 10 0.166 0.889 NA NA
Ghép D1 vào D2
D1 %>%
right_join(D2, by=c("id1"="hh1", "id2"="hh2"))
# A tibble: 5 x 6
id1 id2 X1 X2 X3 X4
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 1 1 0.756 0.802 0.939 0.799
2 2 2 0.560 0.243 0.520 0.869
3 8 3 NA NA 0.483 0.883
4 9 4 NA NA 0.832 0.125
5 10 5 NA NA 0.956 0.527
D1 %>%
full_join(D2, by=c("id1"="hh1", "id2"="hh2"))
# A tibble: 13 x 6
id1 id2 X1 X2 X3 X4
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 1 1 0.756 0.802 0.939 0.799
2 2 2 0.560 0.243 0.520 0.869
3 3 3 0.789 0.421 NA NA
4 4 4 0.260 0.747 NA NA
5 5 5 0.532 0.589 NA NA
6 6 6 0.349 0.348 NA NA
7 7 7 0.153 0.292 NA NA
8 8 8 0.0827 0.745 NA NA
24
9 9 9 0.843 0.961 NA NA
10 10 10 0.166 0.889 NA NA
11 8 3 NA NA 0.483 0.883
12 9 4 NA NA 0.832 0.125
13 10 5 NA NA 0.956 0.527
D2 %>%
full_join(D1, by=c("hh1"="id1", "hh2"="id2"))
# A tibble: 13 x 6
hh1 hh2 X3 X4 X1 X2
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 1 1 0.939 0.799 0.756 0.802
2 2 2 0.520 0.869 0.560 0.243
3 8 3 0.483 0.883 NA NA
4 9 4 0.832 0.125 NA NA
5 10 5 0.956 0.527 NA NA
6 3 3 NA NA 0.789 0.421
7 4 4 NA NA 0.260 0.747
8 5 5 NA NA 0.532 0.589
9 6 6 NA NA 0.349 0.348
10 7 7 NA NA 0.153 0.292
11 8 8 NA NA 0.0827 0.745
12 9 9 NA NA 0.843 0.961
13 10 10 NA NA 0.166 0.889
D2 %>%
full_join(D1, by=c("hh1"="id1", "hh2"="id2"),keep=T)
# A tibble: 13 x 8
hh1 hh2 X3 X4 id1 id2 X1 X2
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 1 1 0.939 0.799 1 1 0.756 0.802
2 2 2 0.520 0.869 2 2 0.560 0.243
3 8 3 0.483 0.883 NA NA NA NA
4 9 4 0.832 0.125 NA NA NA NA
5 10 5 0.956 0.527 NA NA NA NA
25
6 NA NA NA NA 3 3 0.789 0.421
7 NA NA NA NA 4 4 0.260 0.747
8 NA NA NA NA 5 5 0.532 0.589
9 NA NA NA NA 6 6 0.349 0.348
10 NA NA NA NA 7 7 0.153 0.292
11 NA NA NA NA 8 8 0.0827 0.745
12 NA NA NA NA 9 9 0.843 0.961
13 NA NA NA NA 10 10 0.166 0.889
Bài tập
26