Chuyển đến nội dung chính

Chia Tập Dữ Liệu Con (Subsetting) trong R

Chia tập dữ liệu con là kỹ năng thiết yếu cho mọi chuyên gia dữ liệu. Học và thực hành subsetting dữ liệu trong hướng dẫn tương tác nhanh này!
· 6 phút đọc

Khám phá cùng AI

Dù bạn đang so sánh cách các nhóm nhân khẩu học khác nhau phản hồi chiến dịch tiếp thị, thu hẹp phạm vi theo một khung thời gian cụ thể, hay trích xuất thông tin về một vài sản phẩm được chọn trong kho, việc chia tập dữ liệu con giúp bạn lấy ra những quan sát hữu ích từ tập dữ liệu. R là một công cụ tuyệt vời giúp việc subsetting dữ liệu trở nên dễ dàng và trực quan. Đến cuối hướng dẫn này, bạn sẽ biết cách trích xuất thông tin mình cần từ tập dữ liệu.

Chia tập dữ liệu con không làm thay đổi nội dung dữ liệu, mà chỉ chọn phần phù hợp nhất với mục tiêu bạn đặt ra. Nhìn chung, có ba cách để chia các hàng và cột của tập dữ liệu—theo chỉ số, theo tên và theo giá trị.

Chia Hàng và Cột Theo Chỉ Số

Một cách để chia hàng và cột là dựa trên chỉ số của tập dữ liệu. Cách này tương tự như mô tả "hàng thứ nhất", "tất cả các hàng ở cột thứ hai và thứ năm", hoặc "hàng thứ nhất trong các cột từ thứ hai đến thứ năm". Hãy biểu diễn các cụm này bằng tập dữ liệu iris trong R. Theo tài liệu của nó, "[b]ộ dữ liệu iris nổi tiếng (của Fisher hoặc Anderson) này cung cấp số đo tính bằng xentimét của các biến chiều dài và chiều rộng lá đài (sepal) và cánh hoa (petal), tương ứng, cho 50 bông của mỗi trong 3 loài iris. Các loài là Iris setosa, versicolor, và virginica."


          # "The first row":
          iris[1, ]

          # "All rows in second and fifth columns":
          iris[, c(2, 5)]

          # "The first row in second to fifth columns":
          iris[1, 2:5]
          

Để chia dữ liệu, bạn dùng dấu ngoặc vuông sau đối tượng tập dữ liệu. Hàng của tập dữ liệu được chỉ định ở phần tử thứ nhất trong ngoặc vuông, và cột được chỉ định ở phần tử thứ hai, ngăn cách bởi dấu phẩy:

data[rows, columns]

Chia Hàng và Cột Theo Tên

Trong R, hàng và cột của tập dữ liệu có thuộc tính tên. Tên hàng hiếm khi được dùng và mặc định cung cấp chỉ số—số nguyên từ 1 đến số lượng hàng của tập dữ liệu—giống như bạn đã thấy ở phần trước. Thực tế, nếu bạn gọi rownames() trên tập dữ liệu iris, bạn sẽ thấy chúng chỉ được đánh số từ 1 đến 150:

 > rownames(iris)
[1] "1"   "2"   "3"   "4"   "5"   "6"   "7"   "8"   "9"   "10"  "11"  "12"  "13"  "14"
[15] "15"  "16"  "17"  "18"  "19"  "20"  "21"  "22"  "23"  "24"  "25"  "26"  "27"  "28"
[29] "29"  "30"  "31"  "32"  "33"  "34"  "35"  "36"  "37"  "38"  "39"  "40"  "41"  "42"
[43] "43"  "44"  "45"  "46"  "47"  "48"  "49"  "50"  "51"  "52"  "53"  "54"  "55"  "56"
[57] "57"  "58"  "59"  "60"  "61"  "62"  "63"  "64"  "65"  "66"  "67"  "68"  "69"  "70"
[71] "71"  "72"  "73"  "74"  "75"  "76"  "77"  "78"  "79"  "80"  "81"  "82"  "83"  "84"
[85] "85"  "86"  "87"  "88"  "89"  "90"  "91"  "92"  "93"  "94"  "95"  "96"  "97"  "98"
[99] "99"  "100" "101" "102" "103" "104" "105" "106" "107" "108" "109" "110" "111" "112"
[113] "113" "114" "115" "116" "117" "118" "119" "120" "121" "122" "123" "124" "125" "126"
[127] "127" "128" "129" "130" "131" "132" "133" "134" "135" "136" "137" "138" "139" "140"
[141] "141" "142" "143" "144" "145" "146" "147" "148" "149" "150"

> nrow(iris)
[1] 150

Tên hàng phổ biến hơn ở các tập dữ liệu nhỏ và được dùng để giúp nhận diện các quan sát trong tập dữ liệu dễ dàng hơn. Ví dụ, với một tập dữ liệu nhỏ chứa thông tin sức khỏe bệnh nhân của một bác sĩ, tên hàng có thể là họ tên đầy đủ của các bệnh nhân.

Ngược lại, tên cột hầu như có trong mọi tập dữ liệu. Bạn có thể truy cập chúng bằng hàm colnames() hoặc names():

colnames(iris)
[1] "Sepal.Length" "Sepal.Width"  "Petal.Length" "Petal.Width"  "Species"     

names(iris)
[1] "Sepal.Length" "Sepal.Width"  "Petal.Length" "Petal.Width"  "Species"

Để chia tập dữ liệu theo tên hàng và cột, chỉ cần tiếp tục dùng dấu ngoặc vuông sau đối tượng tập dữ liệu:


            # Sepal width của quan sát thứ năm
            iris["5", "Sepal.Width"]

            # Sepal width và petal width
            iris[, c("Sepal.Width", "Petal.Width")]
            

Lưu ý rằng cả tên hàng và tên cột đều là ký tự, nên bắt buộc phải dùng dấu nháy đơn hoặc kép!

Chia Hàng và Cột Theo Giá Trị

Chia theo giá trị thường mang lại sự linh hoạt nhất. Ví dụ, bạn có thể trích xuất dữ liệu về Iris setosa bằng một biểu thức điều kiện như sau:

> iris[iris$Species == "setosa", ]
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1           5.1         3.5          1.4         0.2  setosa
2           4.9         3.0          1.4         0.2  setosa
3           4.7         3.2          1.3         0.2  setosa
4           4.6         3.1          1.5         0.2  setosa

...

47          5.1         3.8          1.6         0.2  setosa
48          4.6         3.2          1.4         0.2  setosa
49          5.3         3.7          1.5         0.2  setosa
50          5.0         3.3          1.4         0.2  setosa

Các biểu thức điều kiện như iris$Species == "setosa" nằm ở phần tử hàng trong ngoặc vuông (tức là phần tử thứ nhất trước dấu phẩy). Ngoài biểu thức điều kiện ở phần tử thứ nhất, bạn có thể chỉ định cột theo chỉ số hoặc tên ở phần tử thứ hai. Ở bảng điều khiển bên dưới, hãy thử chọn chỉ các số đo sepal của Iris setosa:


        # In ra các số đo sepal cho setosa
        

Tóm tắt

Trong hướng dẫn này, bạn đã:

  • Tìm hiểu cách chia khung dữ liệu theo chỉ số. Hàng và cột được đánh số nguyên từ 1 đến số lượng hàng và cột tương ứng.
  • Tìm hiểu cách chia khung dữ liệu theo tên. Bạn biết rằng tên hàng hiếm khi được chỉ định, và tên cột là kiểu ký tự.
  • Học cách dùng biểu thức điều kiện trong phần tử hàng bên trong ngoặc vuông để chia khung dữ liệu theo giá trị.
  • Học cách kết hợp các phương pháp này để linh hoạt hơn (ví dụ: dùng điều kiện cho hàng và chia theo chỉ số hoặc tên cho cột).

Dưới đây là một số bài tập để củng cố những gì bạn đã học. Luyện tập sẽ tạo nên sự thành thạo, nên hãy thử nhé!

Bài Tập Thực Hành

Chọn tất cả các quan sát có sepal width lớn hơn petal length.


        # Quan sát nào có sepal width lớn hơn petal length?
        

Chọn tất cả Iris versicolor có sepal width lớn hơn sepal width trung bình của tất cả các loài.


        # Lưu dữ liệu versicolor vào một đối tượng tên là versicolor


        # Chọn tất cả Iris versicolor có sepal width lớn hơn mức trung bình
        

Báo cáo sepal width trung bình cho tất cả Iris virginica có petal length nhỏ hơn 5 xentimét.


        # Bạn có thể giải theo cách mình muốn!
        

Muốn tìm hiểu thêm các cách khác để khai thác thông tin từ dữ liệu? Xem các khóa học này trên DataCamp!

Xem thêm hướng dẫn Gộp Tập Dữ Liệu trong R của chúng tôi.

Dù bạn đang so sánh cách các nhóm nhân khẩu học khác nhau phản hồi chiến dịch tiếp thị, thu hẹp phạm vi theo một khung thời gian cụ thể, hay trích xuất thông tin về một vài sản phẩm được chọn trong kho, việc chia tập dữ liệu con giúp bạn lấy ra những quan sát hữu ích từ tập dữ liệu. R là một công cụ tuyệt vời giúp việc subsetting dữ liệu trở nên dễ dàng và trực quan. Đến cuối hướng dẫn này, bạn sẽ biết cách trích xuất thông tin mình cần từ tập dữ liệu.

Chia tập dữ liệu con không làm thay đổi nội dung dữ liệu, mà chỉ chọn phần phù hợp nhất với mục tiêu bạn đặt ra. Nhìn chung, có ba cách để chia các hàng và cột của tập dữ liệu — theo chỉ số (index), theo tên (name), và theo giá trị (value).

Chia Hàng và Cột Theo Chỉ Số

Một cách để chia hàng và cột là dựa trên chỉ số của tập dữ liệu. Cách này tương tự như mô tả "hàng thứ nhất", "tất cả các hàng ở cột thứ hai và thứ năm", hoặc "hàng thứ nhất trong các cột từ thứ hai đến thứ năm". Hãy biểu diễn các cụm này bằng tập dữ liệu iris trong R. Theo tài liệu của nó, "[b]ộ dữ liệu iris nổi tiếng (của Fisher hoặc Anderson) này cung cấp số đo tính bằng xentimét của các biến chiều dài và chiều rộng lá đài (sepal) và cánh hoa (petal), tương ứng, cho 50 bông của mỗi trong 3 loài iris. Các loài là Iris setosa, versicolor, và virginica."


          # "The first row":
          iris[1, ]

          # "All rows in second and fifth columns":
          iris[, c(2, 5)]

          # "The first row in second to fifth columns":
          iris[1, 2:5]
          

Để chia dữ liệu, bạn dùng dấu ngoặc vuông sau đối tượng tập dữ liệu. Hàng được chỉ định ở phần tử thứ nhất trong ngoặc vuông, và cột được chỉ định ở phần tử thứ hai, cách nhau bằng dấu phẩy:

data[rows, columns]

Chia Hàng và Cột Theo Tên

Trong R, hàng và cột của tập dữ liệu có thuộc tính tên. Tên hàng hiếm khi được dùng và mặc định là chỉ số — số nguyên từ 1 đến số lượng hàng của tập dữ liệu — giống như bạn thấy ở phần trước. Thực tế, nếu bạn gọi rownames() trên tập dữ liệu iris, bạn sẽ thấy chúng chỉ được đánh số từ 1 đến 150:

 > rownames(iris)
[1] "1"   "2"   "3"   "4"   "5"   "6"   "7"   "8"   "9"   "10"  "11"  "12"  "13"  "14"
[15] "15"  "16"  "17"  "18"  "19"  "20"  "21"  "22"  "23"  "24"  "25"  "26"  "27"  "28"
[29] "29"  "30"  "31"  "32"  "33"  "34"  "35"  "36"  "37"  "38"  "39"  "40"  "41"  "42"
[43] "43"  "44"  "45"  "46"  "47"  "48"  "49"  "50"  "51"  "52"  "53"  "54"  "55"  "56"
[57] "57"  "58"  "59"  "60"  "61"  "62"  "63"  "64"  "65"  "66"  "67"  "68"  "69"  "70"
[71] "71"  "72"  "73"  "74"  "75"  "76"  "77"  "78"  "79"  "80"  "81"  "82"  "83"  "84"
[85] "85"  "86"  "87"  "88"  "89"  "90"  "91"  "92"  "93"  "94"  "95"  "96"  "97"  "98"
[99] "99"  "100" "101" "102" "103" "104" "105" "106" "107" "108" "109" "110" "111" "112"
[113] "113" "114" "115" "116" "117" "118" "119" "120" "121" "122" "123" "124" "125" "126"
[127] "127" "128" "129" "130" "131" "132" "133" "134" "135" "136" "137" "138" "139" "140"
[141] "141" "142" "143" "144" "145" "146" "147" "148" "149" "150"

> nrow(iris)
[1] 150

Tên hàng phổ biến hơn ở các tập dữ liệu nhỏ và giúp việc nhận diện các quan sát trở nên dễ dàng. Ví dụ, với một tập dữ liệu nhỏ chứa thông tin sức khỏe của bệnh nhân, tên hàng có thể là họ tên đầy đủ của từng người.

Ngược lại, tên cột hầu như có trong mọi tập dữ liệu. Bạn có thể truy cập chúng bằng hàm colnames() hoặc names():

colnames(iris)
[1] "Sepal.Length" "Sepal.Width"  "Petal.Length" "Petal.Width"  "Species"     

names(iris)
[1] "Sepal.Length" "Sepal.Width"  "Petal.Length" "Petal.Width"  "Species"

Để chia tập dữ liệu theo tên hàng và cột, chỉ cần tiếp tục dùng dấu ngoặc vuông sau đối tượng tập dữ liệu:


            # Sepal width của quan sát thứ năm
            iris["5", "Sepal.Width"]

            # Sepal width và petal width
            iris[, c("Sepal.Width", "Petal.Width")]
            

Lưu ý rằng cả tên hàng và tên cột đều là kiểu ký tự, nên bắt buộc phải dùng dấu nháy đơn hoặc kép!

Chia Hàng và Cột Theo Giá Trị

Chia theo giá trị thường mang lại sự linh hoạt nhất. Ví dụ, bạn có thể trích xuất dữ liệu về Iris setosa bằng một biểu thức điều kiện như sau:

> iris[iris$Species == "setosa", ]
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1           5.1         3.5          1.4         0.2  setosa
2           4.9         3.0          1.4         0.2  setosa
3           4.7         3.2          1.3         0.2  setosa
4           4.6         3.1          1.5         0.2  setosa

...

47          5.1         3.8          1.6         0.2  setosa
48          4.6         3.2          1.4         0.2  setosa
49          5.3         3.7          1.5         0.2  setosa
50          5.0         3.3          1.4         0.2  setosa

Các biểu thức điều kiện như iris$Species == "setosa" thuộc về phần tử hàng trong ngoặc vuông (tức là phần tử thứ nhất trước dấu phẩy). Bên cạnh biểu thức điều kiện ở phần tử thứ nhất, bạn có thể chỉ định cột theo chỉ số hoặc tên ở phần tử thứ hai. Ở bảng điều khiển bên dưới, hãy thử chọn chỉ các số đo sepal của Iris setosa:


        # In ra các số đo sepal cho setosa
        

Tóm tắt

Trong hướng dẫn này, bạn đã:

  • Tìm hiểu cách chia khung dữ liệu theo chỉ số. Hàng và cột được đánh số nguyên từ 1 đến số lượng hàng và cột tương ứng.
  • Tìm hiểu cách chia khung dữ liệu theo tên. Bạn biết rằng tên hàng hiếm khi được chỉ định, và tên cột là kiểu ký tự.
  • Học cách dùng biểu thức điều kiện trong phần tử hàng bên trong ngoặc vuông để chia khung dữ liệu theo giá trị.
  • Học cách kết hợp các phương pháp này để linh hoạt hơn (ví dụ: dùng điều kiện cho hàng và chia theo chỉ số hoặc tên cho cột).

Dưới đây là một số bài tập để củng cố những gì bạn đã học. Luyện tập sẽ tạo nên sự thành thạo, nên hãy thử nhé!

Bài Tập Thực Hành

Chọn tất cả các quan sát có sepal width lớn hơn petal length.


        # Quan sát nào có sepal width lớn hơn petal length?
        

Chọn tất cả Iris versicolor có sepal width lớn hơn sepal width trung bình của tất cả các loài.


        # Lưu dữ liệu versicolor vào một đối tượng tên là versicolor


        # Chọn tất cả Iris versicolor có sepal width lớn hơn mức trung bình
        

Báo cáo sepal width trung bình cho tất cả Iris virginica có petal length nhỏ hơn 5 xentimét.


        # Bạn có thể giải theo cách mình muốn!
        

Muốn tìm hiểu thêm các cách khác để khai thác thông tin từ dữ liệu? Xem các khóa học này trên DataCamp!

Xem thêm hướng dẫn Gộp Tập Dữ Liệu trong R của chúng tôi.

Chủ đề

Liên quan