“21:34:22, 26 - 01 - 2024”
Nhiệm vụ 3.1 tiến hành thao tác 1 số lệnh cơ bản trên dataset “population-and-demography.csv”. Dataset thống kê dân số và dân số theo từng độ tuổi khác nhau của các nước khác nhau.
Thực hiện thao tác đọc và gán dữ liệu vào máy. Sau thao tác này thì dữ liệu từ file “population-and-demography.csv” đã được gán vào d như bên dưới
#Đọc dữ liệu từ file csv và gán vào object d
d <- read.csv("C:/Users/Admin/Downloads/population-and-demography.csv", header = TRUE)
Kiểm tra xem “d” có phải là data frame hay không, nếu đúng thì true và ngược lại. Và kết quả trả về là TRUE suy ra d là một dataframe
is.data.frame(d)
## [1] TRUE
Xác định số hàng, số cột của d dưới dạng vecto. Kết quả trả về thì d tương ứng có 18288 hàng và 24 cột
dim(d)
## [1] 18288 24
Xác định số ô trống của d. Kết quả trả về tương ứng với d không có ô trống nào
sum(is.na(d))
## [1] 0
Thực hiện thống kê mô tả dataset này ta được kết quả bên dưới, ý nghĩa các cột như sau:
n_missing: số ô dữ liệu bị miss(trống)
complete_rate: tỷ lệ ô có dữ liệu
mean: trung bình
sd: độ lệch chuẩn
p0: giá trị nhỏ nhất
p25: Phân vị thứ nhất
p50: Phân vị thứ hai cũng chính là trung vị
p75: phân vị thứ ba
p100: giá trị lớn nhất
hist: biểu đồ Histogram
Xác định các thông tin cơ bản trong d
library(skimr)
skim(d)
Name | d |
Number of rows | 18288 |
Number of columns | 24 |
_______________________ | |
Column type frequency: | |
character | 1 |
numeric | 23 |
________________________ | |
Group variables | None |
Variable type: character
skim_variable | n_missing | complete_rate | min | max | empty | n_unique | whitespace |
---|---|---|---|---|---|---|---|
Country.name | 0 | 1 | 4 | 59 | 0 | 254 | 0 |
Variable type: numeric
skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 | hist |
---|---|---|---|---|---|---|---|---|---|---|
Year | 0 | 1 | 1985.50 | 20.78 | 1950 | 1967.75 | 1985.5 | 2003.25 | 2021 | ▇▇▇▇▇ |
Population | 0 | 1 | 126470436.62 | 588851230.77 | 1363 | 291591.50 | 3833997.5 | 16785463.50 | 7909295000 | ▇▁▁▁▁ |
Population.of.children.under.the.age.of.1 | 0 | 1 | 3133496.86 | 14167006.03 | 25 | 6663.75 | 88352.0 | 463000.50 | 139783730 | ▇▁▁▁▁ |
Population.of.children.under.the.age.of.5 | 0 | 1 | 14825709.57 | 67384368.62 | 136 | 31995.25 | 423784.5 | 2160046.50 | 690360700 | ▇▁▁▁▁ |
Population.of.children.under.the.age.of.15 | 0 | 1 | 41095227.11 | 188416973.54 | 416 | 89541.50 | 1186121.5 | 5905944.75 | 2015023400 | ▇▁▁▁▁ |
Population.under.the.age.of.25 | 0 | 1 | 63762600.31 | 294251869.66 | 623 | 139541.50 | 1843099.5 | 9025129.75 | 3239281000 | ▇▁▁▁▁ |
Population.aged.15.to.64.years | 0 | 1 | 77429505.08 | 367651914.71 | 748 | 170263.50 | 2246772.0 | 9641250.00 | 5132999000 | ▇▁▁▁▁ |
Population.older.than.15.years | 0 | 1 | 85372101.76 | 404866940.61 | 849 | 186716.00 | 2482104.0 | 10354345.50 | 5893678600 | ▇▁▁▁▁ |
Population.older.than.18.years | 0 | 1 | 78196242.04 | 372017010.49 | 752 | 166417.50 | 2238130.5 | 9239904.00 | 5516283000 | ▇▁▁▁▁ |
Population.at.age.1 | 0 | 1 | 3011212.81 | 13661998.41 | 26 | 6473.75 | 85824.0 | 440787.50 | 138478740 | ▇▁▁▁▁ |
Population.aged.1.to.4.years | 0 | 1 | 11692212.72 | 53238243.89 | 101 | 25269.25 | 334454.0 | 1697850.75 | 550970400 | ▇▁▁▁▁ |
Population.aged.5.to.9.years | 0 | 1 | 13598575.21 | 62534310.11 | 138 | 29406.25 | 392220.5 | 1947260.75 | 683611800 | ▇▁▁▁▁ |
Population.aged.10.to.14.years | 0 | 1 | 12670942.28 | 58775457.46 | 73 | 27879.50 | 363895.5 | 1796754.00 | 659934300 | ▇▁▁▁▁ |
Population.aged.15.to.19.years | 0 | 1 | 11782258.92 | 55126036.18 | 110 | 26296.50 | 336969.5 | 1626210.75 | 623576060 | ▇▁▁▁▁ |
Population.aged.20.to.29.years | 0 | 1 | 20872880.04 | 98860990.50 | 158 | 45050.75 | 609723.5 | 2758738.50 | 1210493200 | ▇▁▁▁▁ |
Population.aged.30.to.39.years | 0 | 1 | 17158704.11 | 82404600.95 | 137 | 36608.25 | 486290.5 | 2113149.00 | 1165207300 | ▇▁▁▁▁ |
Population.aged.40.to.49.years | 0 | 1 | 13622138.99 | 66008221.21 | 119 | 27440.25 | 364712.5 | 1556334.00 | 976407200 | ▇▁▁▁▁ |
Population.aged.50.to.59.years | 0 | 1 | 10177069.11 | 49288480.77 | 95 | 19649.75 | 264781.5 | 1203386.00 | 851356900 | ▇▁▁▁▁ |
Population.aged.60.to.69.years | 0 | 1 | 6801756.84 | 32712918.99 | 64 | 12603.00 | 168417.5 | 845242.75 | 598067140 | ▇▁▁▁▁ |
Population.aged.70.to.79.years | 0 | 1 | 3618710.03 | 17491538.61 | 31 | 6221.00 | 81824.0 | 436710.00 | 330491170 | ▇▁▁▁▁ |
Population.aged.80.to.89.years | 0 | 1 | 1195799.30 | 6238308.33 | 6 | 1818.75 | 20269.5 | 133380.50 | 131835590 | ▇▁▁▁▁ |
Population.aged.90.to.99.years | 0 | 1 | 142784.38 | 853350.39 | 0 | 154.75 | 1468.5 | 12499.00 | 22223974 | ▇▁▁▁▁ |
Population.older.than.100.years | 0 | 1 | 3107.72 | 20951.57 | 0 | 0.00 | 13.0 | 163.00 | 593166 | ▇▁▁▁▁ |
Các ký hiệu tên tương ứng theo thứ tự lần lượt từ cột 1 đến cột 24
Country name= ‘cn’
Year= ‘y’
Population= ‘p’
Population of children under the age of 1= ‘pu1’
Population of children under the age of 5= ‘pu5’
Population of children under the age of 15= ‘pu15’
Population under the age of 25= ‘pu25’
Population aged 15 to 64 years= ‘p15t64’
Population older than 15 years= ‘pt15’
Population older than 18 years= ‘pt18’
Population at age 1= ‘p1’
Population aged 1 to 4 years= ‘p1t4’
Population aged 5 to 9 years= ‘p5t9’
Population aged 10 to 14 years= ‘p10t14’
Population aged 15 to 19 years= ‘p15t19’
Population aged 20 to 29 years= ‘p20t29’
Population aged 30 to 39 years= ‘p30t39’
Population aged 40 to 49 years= ‘p40t49’
Population aged 50 to 59 years= ‘p50t59’
Population aged 60 to 69 years= ‘p60t69’
Population aged 70 to 79 years= ‘p70t79’
Population aged 80 to 89 years= ‘p80t89’
Population aged 90 to 99 years= ‘p90t99’
Population older than 100 years= ‘pt100’
names(d) = c('cn','y','p','pu1','pu5','pu15','pu25','p15t64','pt15','pt18','p1','p1t4','p5t9','p10t14','p15t19','p20t29','p30t39','p40t49','p50t59','p60t69','p70t79','p80t89','p90t99','pt100')
names(d)
## [1] "cn" "y" "p" "pu1" "pu5" "pu15" "pu25" "p15t64"
## [9] "pt15" "pt18" "p1" "p1t4" "p5t9" "p10t14" "p15t19" "p20t29"
## [17] "p30t39" "p40t49" "p50t59" "p60t69" "p70t79" "p80t89" "p90t99" "pt100"
Việc rút trích dữ liệu theo ý muốn cũng như phần dữ liệu được rút sẽ giúp việc tìm hiểu trở nên tối ưu hơn, để chắc chắn đã rút trích thành công ta dùng lệnh str(x) với x là tên object mà ta gán dữ liệu để có thể xem các đối tượng và số lượng của biến của x
Chọn ra 6 cột tương ứng là “cn”,“y”,“p”,“pu5”,“pu15”,“pu25”,“pt18”,“pt100” và chọn những hàng bắt đầu bằng chữ “A” gán vào object d1. Kết quả trả về là d1 gồm có 6 cột và 1152 giá trị
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(stringr)
d1 <- select(d,cn,y,p,pu5,pu15,pu25,pt18,pt100) %>% filter(str_detect(cn, "^A"))
str(d1)
## 'data.frame': 1152 obs. of 8 variables:
## $ cn : chr "Afghanistan" "Afghanistan" "Afghanistan" "Afghanistan" ...
## $ y : int 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 ...
## $ p : num 7480464 7571542 7667534 7764549 7864289 ...
## $ pu5 : int 1248282 1246857 1248220 1254725 1267817 1291129 1322342 1354752 1387274 1421808 ...
## $ pu15 : int 3068855 3105444 3145070 3186382 3231060 3281470 3337026 3396048 3455343 3518528 ...
## $ pu25 : num 4494349 4552138 4613604 4676232 4741371 ...
## $ pt18 : num 3946595 3993640 4041439 4088379 4136116 ...
## $ pt100: num 0 0 0 0 0 0 0 0 0 0 ...
Câu lệnh biểu thị một điều kiện so sánh trên cột pt100 của bảng dữ liệu d1
Nếu giá trị trong cột pt100 của hàng nào đó bằng 0 (d1$pt100 == 0 đúng), thì giá trị của cột pt100 trong hàng đó sẽ được thay thế bằng chuỗi ‘Khong Co’.
Nếu giá trị trong cột pt100 của hàng nào đó không bằng 0 (d1$pt100 == 0 sai), thì giá trị của cột pt100 trong hàng đó sẽ được thay thế bằng chuỗi ‘Co’
#Câu lệnh biểu thị một điều kiện so sánh trên cột pt100 của bảng dữ liệu d1
d1$pt100.phanloai <- ifelse(d1$pt100 == 0, 'Khong Co', 'Co')
str(d1)
## 'data.frame': 1152 obs. of 9 variables:
## $ cn : chr "Afghanistan" "Afghanistan" "Afghanistan" "Afghanistan" ...
## $ y : int 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 ...
## $ p : num 7480464 7571542 7667534 7764549 7864289 ...
## $ pu5 : int 1248282 1246857 1248220 1254725 1267817 1291129 1322342 1354752 1387274 1421808 ...
## $ pu15 : int 3068855 3105444 3145070 3186382 3231060 3281470 3337026 3396048 3455343 3518528 ...
## $ pu25 : num 4494349 4552138 4613604 4676232 4741371 ...
## $ pt18 : num 3946595 3993640 4041439 4088379 4136116 ...
## $ pt100 : num 0 0 0 0 0 0 0 0 0 0 ...
## $ pt100.phanloai: chr "Khong Co" "Khong Co" "Khong Co" "Khong Co" ...
Lệnh được sử dụng để tạo một biến mới (p.cut) trong bảng dữ liệu d1 bằng cách chia biến hiện tại p thành các khoảng và gắn tên cho mỗi khoảng dựa trên giá trị của nó. Cụ thể:
d1$p là biến bạn đang muốn chia thành các khoảng.
3 là số lượng khoảng bạn muốn tạo.
labels = c(‘It’, ‘Trung Binh’, ‘Nhieu’) là tên tương ứng với mỗi khoảng.
Kết quả là, biến mới p.cut sẽ chứa các tên tương ứng (‘It’,‘Trung Binh’,‘Nhieu’) với khoảng mà giá trị của p thuộc vào. Nó tạo ra một biến phân loại dựa trên giá trị của biến số p.
d1$p.cut <- cut(d1$p,3,labels = c('It','Trung Binh','Nhieu'))
str(d1)
## 'data.frame': 1152 obs. of 10 variables:
## $ cn : chr "Afghanistan" "Afghanistan" "Afghanistan" "Afghanistan" ...
## $ y : int 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 ...
## $ p : num 7480464 7571542 7667534 7764549 7864289 ...
## $ pu5 : int 1248282 1246857 1248220 1254725 1267817 1291129 1322342 1354752 1387274 1421808 ...
## $ pu15 : int 3068855 3105444 3145070 3186382 3231060 3281470 3337026 3396048 3455343 3518528 ...
## $ pu25 : num 4494349 4552138 4613604 4676232 4741371 ...
## $ pt18 : num 3946595 3993640 4041439 4088379 4136116 ...
## $ pt100 : num 0 0 0 0 0 0 0 0 0 0 ...
## $ pt100.phanloai: chr "Khong Co" "Khong Co" "Khong Co" "Khong Co" ...
## $ p.cut : Factor w/ 3 levels "It","Trung Binh",..: 1 1 1 1 1 1 1 1 1 1 ...
Lập bảng tần sô 1 biến
Bảng tần số có 72 mức giá (1d), được đánh số từ 1 đến 72, tương ứng với mỗi năm từ 1950 đến …
Số lần xuất hiện là 16.
Attribue “dimnames” mô tả các tên của mỗi mức giá, và chúng được hiển thị dưới dạng chuỗi năm, ví dụ: “1950”, “1951”, “1952”, …
d2 <- table(d1$y)
str(d2)
## 'table' int [1:72(1d)] 16 16 16 16 16 16 16 16 16 16 ...
## - attr(*, "dimnames")=List of 1
## ..$ : chr [1:72] "1950" "1951" "1952" "1953" ...
Lập bảng tần số 2 biến
Dưới đây là kết quả chi tiết:
Bảng tần số có 72 hàng (1:72) và 3 cột (1:3).
Chiều thứ nhất (hàng) đại diện cho năm, được đánh số từ 1 đến 72, tương ứng với mỗi năm từ 1950 đến …
Chiều thứ hai (cột) đại diện cho các nhóm hoặc mức độ (It, Trung Binh, Nhieu).
Mỗi ô trong bảng chứa số lần xuất hiện tương ứng với năm và nhóm tương ứng.
Attribute “dimnames” bao gồm hai danh sách:
Danh sách đầu tiên (chiều hàng) chứa tên của mỗi năm, ví dụ: “1950”, “1951”, “1952”, …
Danh sách thứ hai (chiều cột) chứa tên của mỗi nhóm, ví dụ: “It”, “Trung Binh”, “Nhieu”.
d3 <- table(d1$y,d1$p.cut)
str(d3)
## 'table' int [1:72, 1:3] 16 16 16 16 16 16 15 15 15 15 ...
## - attr(*, "dimnames")=List of 2
## ..$ : chr [1:72] "1950" "1951" "1952" "1953" ...
## ..$ : chr [1:3] "It" "Trung Binh" "Nhieu"
Tính trung bình, phương sai, min, max của cột
p
Kết quả là:
st Qu.: Phân vị thứ nhất . 25% dữ liệu nhỏ hơn giá trị này (7.099e+04).
Median: Trung vị. Giá trị giữa khi dữ liệu được sắp xếp theo thứ tự tăng dần (7.023e+06).
Mean: Giá trị trung bình (2.338e+08).
3rd Qu.: Phân vị thứ ba . 75% dữ liệu nhỏ hơn giá trị này (2.108e+07).
Max.: Giá trị lớn nhất trong dữ liệu (4.695e+09).
summary(d1$p)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 5.036e+03 7.099e+04 7.023e+06 2.338e+08 2.108e+07 4.695e+09
Phân tích dân số trung bình theo từng nhóm quốc gia
Lệnh d4 <- d1 %>% group_by(y) %>% summarise(mean_of_population = mean(p)) trong R sử dụng gói dplyr để thực hiện một phép tổng hợp dữ liệu trên cột “cn” của bảng dữ liệu “d1” theo nhóm “y”. Dưới đây là giải thích chi tiết:
group_by(y): Nhóm dữ liệu theo cột “y”. Điều này có nghĩa là các phép tổng hợp tiếp theo sẽ được thực hiện cho từng nhóm “y” riêng biệt.
summarise(mean_of_population = mean(p)): Tính trung bình của cột “p” cho mỗi nhóm “cn” và tạo ra một cột mới có tên “mean_of_population” để lưu trữ kết quả.
Kết quả trả về:
Cột “cn”: Chứa tên quốc gia (cột “cn” trong bảng dữ liệu).
Cột “mean_of_population” chứa giá trị trung bình của cột “p” cho từng năm.
d4 <- d1 %>% group_by(cn) %>% summarise(mean_of_population = mean(p))
str(d4)
## tibble [16 × 2] (S3: tbl_df/tbl/data.frame)
## $ cn : chr [1:16] "Afghanistan" "Africa (UN)" "Albania" "Algeria" ...
## $ mean_of_population: num [1:16] 1.66e+07 6.43e+08 2.63e+06 2.35e+07 3.92e+04 ...
Phân tích và tổng hợp số trẻ em dưới 15 tuổi theo nhóm quốc gia và năm
Lệnh R này sử dụng dplyr để tạo một tóm tắt của data frame d1 bằng cách nhóm theo cột cn (quốc gia) và y (năm), sau đó tính tổng số lượng (n) và tổng của cột pu15 trong mỗi nhóm. Kết quả sẽ là data frame mới d5 chứa thông tin tổng hợp theo quốc gia và năm.
Kết quả trả về có 1,152 dòng và 4 cột:
d5 <- d1 %>% group_by(cn,y) %>% summarise(n = n(),sum_of_pu15 = sum(pu15),.groups = 'drop')
str(d5)
## tibble [1,152 × 4] (S3: tbl_df/tbl/data.frame)
## $ cn : chr [1:1152] "Afghanistan" "Afghanistan" "Afghanistan" "Afghanistan" ...
## $ y : int [1:1152] 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 ...
## $ n : int [1:1152] 1 1 1 1 1 1 1 1 1 1 ...
## $ sum_of_pu15: int [1:1152] 3068855 3105444 3145070 3186382 3231060 3281470 3337026 3396048 3455343 3518528 ...
Nhiệm vụ 3.1 tiến hành thao tác 1 số lệnh cơ bản trên dataset “population.csv”. Dataset thống kê dân số của các nước khác nhau.
#Đọc dữ liệu từ file csv và gán vào object a
a <- read.csv("C:/Users/Admin/Downloads/population.csv", header = TRUE)
Kiểm tra xem “a” có phải là data frame hay không, nếu đúng thì true và ngược lại. Và kết quả trả về là TRUE > a là một dataframe
is.data.frame(a)
## [1] TRUE
Xác định số hàng, số cột của a dưới dạng vecto. Kết quả trả về thì d tương ứng có 16400 hàng và 4 cột
dim(a)
## [1] 16400 4
Xác định số ô trống của a. Kết quả trả về tương ứng với a không có ô trống nào
sum(is.na(a))
## [1] 0
Thực hiện thống kê mô tả dataset này ta được kết quả bên dưới, ý nghĩa các cột như sau:
n_missing: số ô dữ liệu bị miss(trống)
complete_rate: tỷ lệ ô có dữ liệu
mean: trung bình
sd: độ lệch chuẩn
p0: giá trị nhỏ nhất
p25: Phân vị thứ nhất
p50: Phân vị thứ hai cũng chính là trung vị
p75: phân vị thứ ba
p100: giá trị lớn nhất
hist: biểu đồ Histogram
Xác định các thông tin cơ bản trong a
library(skimr)
skim(a)
Name | a |
Number of rows | 16400 |
Number of columns | 4 |
_______________________ | |
Column type frequency: | |
character | 2 |
numeric | 2 |
________________________ | |
Group variables | None |
Variable type: character
skim_variable | n_missing | complete_rate | min | max | empty | n_unique | whitespace |
---|---|---|---|---|---|---|---|
Country.Name | 0 | 1 | 4 | 52 | 0 | 265 | 0 |
Country.Code | 0 | 1 | 3 | 3 | 0 | 265 | 0 |
Variable type: numeric
skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 | hist |
---|---|---|---|---|---|---|---|---|---|---|
Year | 0 | 1 | 1990.53 | 17.9 | 1960 | 1975.0 | 1991 | 2006 | 2021 | ▇▇▇▇▇ |
Value | 0 | 1 | 214080370.13 | 704055432.4 | 2646 | 986302.5 | 6731400 | 46024452 | 7888408686 | ▇▁▁▁▁ |
Các ký hiệu tên tương ứng theo thứ tự lần lượt từ cột 1 đến cột 4
Country name= ‘cn2’
Country code= ‘ccode’
Year= ‘y2’
Value= ‘v’
names(a)= c('cn2','ccode','y2','v')
names(a)
## [1] "cn2" "ccode" "y2" "v"
Việc rút trích dữ liệu theo ý muốn cũng như phần dữ liệu được rút sẽ giúp việc tìm hiểu trở nên tối ưu hơn, để chắc chắn đã rút trích thành công ta dùng lệnh str(x) với x là tên object mà ta gán dữ liệu để có thể xem các đối tượng và số lượng của biến của x
Chọn ra 6 cột tương ứng là “cn2”,“ccode”,“y2”,“v” và chọn những hàng bắt đầu bằng chữ “B” gán vào object a1. Kết quả trả về là a1 gồm có 4 cột và 1116 giá trị
library(dplyr)
library(stringr)
a1 <- select(a,cn2,ccode,y2,v) %>% filter(str_detect(ccode, "^B"))
str(a1)
## 'data.frame': 1116 obs. of 4 variables:
## $ cn2 : chr "Burundi" "Burundi" "Burundi" "Burundi" ...
## $ ccode: chr "BDI" "BDI" "BDI" "BDI" ...
## $ y2 : int 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 ...
## $ v : num 2746628 2815972 2887398 2948133 3033221 ...
Tạo một cột mới là “v.Danso”:
Nếu giá trị trong cột “v” nhỏ hơn 100,000, thì giá trị tương ứng trong cột “SL.Danso” sẽ là ‘Ít’.
Nếu giá trị trong cột “v” nằm trong khoảng từ 100,000 đến 5,000,000, thì giá trị tương ứng trong cột “SL.Danso” sẽ là ‘Trung Bình’.
Nếu giá trị trong cột “v” lớn hơn 5,000,000, thì giá trị tương ứng trong cột “SL.Danso” sẽ là ‘Nhiều’.
a1$v.Danso <- case_when(a1$v < 100000 ~ 'Ít', a1$v >= 100000 & a1$v <= 5000000 ~ 'Trung Bình', a1$v > 5000000 ~ 'Nhiều')
str(a1)
## 'data.frame': 1116 obs. of 5 variables:
## $ cn2 : chr "Burundi" "Burundi" "Burundi" "Burundi" ...
## $ ccode : chr "BDI" "BDI" "BDI" "BDI" ...
## $ y2 : int 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 ...
## $ v : num 2746628 2815972 2887398 2948133 3033221 ...
## $ v.Danso: chr "Trung Bình" "Trung Bình" "Trung Bình" "Trung Bình" ...
Lệnh này Chia phạm vi giá trị của cột “y” thành 3 khoảng và gán tên cho mỗi khoảng là ‘KhoangTG1’, ‘KhoangTG2’, và ‘KhoangTG3’. Các giá trị của cột “y” sẽ được gán vào các khoảng tương ứng.
a1$y2.cut <- cut(a1$y2, 3, labels = c('KhoangTG1', 'KhoangTG2', 'KhoangTG3'))
str(a1)
## 'data.frame': 1116 obs. of 6 variables:
## $ cn2 : chr "Burundi" "Burundi" "Burundi" "Burundi" ...
## $ ccode : chr "BDI" "BDI" "BDI" "BDI" ...
## $ y2 : int 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 ...
## $ v : num 2746628 2815972 2887398 2948133 3033221 ...
## $ v.Danso: chr "Trung Bình" "Trung Bình" "Trung Bình" "Trung Bình" ...
## $ y2.cut : Factor w/ 3 levels "KhoangTG1","KhoangTG2",..: 1 1 1 1 1 1 1 1 1 1 ...
Bảng tần số trên hiển thị số lượng quan sát cho mỗi giá trị của cột “y2.cut” cho từng quốc gia (“cn2”) trong data frame “a1”. Mỗi ô trong bảng đại diện cho số lượng quan sát thuộc từng phạm vi của “y2.cut” (KhoangTG1, KhoangTG2, KhoangTG3) cho mỗi quốc gia.
table(a1$cn2,a1$y2.cut)
##
## KhoangTG1 KhoangTG2 KhoangTG3
## Bahamas, The 21 20 21
## Bahrain 21 20 21
## Bangladesh 21 20 21
## Barbados 21 20 21
## Belarus 21 20 21
## Belgium 21 20 21
## Belize 21 20 21
## Benin 21 20 21
## Bermuda 21 20 21
## Bhutan 21 20 21
## Bolivia 21 20 21
## Bosnia and Herzegovina 21 20 21
## Botswana 21 20 21
## Brazil 21 20 21
## Brunei Darussalam 21 20 21
## Bulgaria 21 20 21
## Burkina Faso 21 20 21
## Burundi 21 20 21
Tính trung bình, phương sai, min, max của cột v
Kết quả là:
Min.: Giá trị nhỏ nhất trong dữ liệu. Trong trường hợp này, giá trị nhỏ nhất của cột v là 44,400.
1st Qu.: Phần vị phân vị thứ nhất . Khoảng 25% giá trị trong dữ liệu nhỏ hơn hoặc bằng giá trị này. Trong trường hợp này, giá trị 1st Qu. là 315,046.
Median: Giá trị trung bình . Khoảng 50% giá trị trong dữ liệu nhỏ hơn hoặc bằng giá trị này. Trong trường hợp này, giá trị Median là 3,813,324.
Mean: Giá trị trung bình của dữ liệu. Trong trường hợp này, giá trị Mean là 17,929,417.
3rd Qu.: Phần vị phân vị thứ ba . Khoảng 75% giá trị trong dữ liệu nhỏ hơn hoặc bằng giá trị này. Trong trường hợp này, giá trị 3rd Qu. là 9,489,023.
Max.: Giá trị lớn nhất trong dữ liệu. Trong trường hợp này, giá trị lớn nhất của cột v là 214,326,223.
summary(a1$v)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 44400 315046 3813324 17929417 9489023 214326223
Tính dân số trung bình của mỗi quốc gia qua tất cả các năm
Kết quả hiển thị của a3 cho thấy mỗi quốc gia (cn2) và dân số trung bình (Average_Danso) của nó. Dữ liệu được tổ chức dưới dạng một tibble có 18 hàng và 2 cột.
a3 <- a1 %>% group_by(cn2) %>% summarise(Average_Danso = mean(v, na.rm = TRUE), .groups = 'drop')
str(a3)
## tibble [18 × 2] (S3: tbl_df/tbl/data.frame)
## $ cn2 : chr [1:18] "Bahamas, The" "Bahrain" "Bangladesh" "Barbados" ...
## $ Average_Danso: num [1:18] 2.74e+05 6.52e+05 1.09e+08 2.59e+05 9.52e+06 ...
Đếm số lượng quốc gia khác nhau có trong dữ liệu. Kết quả là có tổng cộng 18 quốc gia trong obj a1
length(unique(a1$cn2))
## [1] 18