Menu
CoddyTech

Tạo khung dữ liệu

Thuộc phần Logic và luồng điều khiển trong hành trình R của Coddy. Bài học 42 trên 64.

Khung dữ liệu là bảng của R: mỗi cột là một vectơ có kiểu dữ liệu riêng, và mọi cột đều có cùng độ dài, mỗi hàng có một giá trị. data.frame() tạo một khung dữ liệu từ các vectơ có tên:

people <- data.frame(
  name = c("ada", "bo", "cy"),
  age = c(36, 22, 41),
  city = c("london", "paris", "rome")
)
print(people)

Đầu ra:

  name age   city
1  ada  36 london
2   bo  22  paris
3   cy  41   rome

nrow() và ncol() cho biết kích thước, còn names() liệt kê các cột. Khác với ma trận, các cột có thể chứa những kiểu dữ liệu khác nhau, ở đây là văn bản và số.

people <- data.frame(
  name = c("ada", "bo", "cy"),
  age = c(36, 22, 41),
  city = c("london", "paris", "rome")
)
print(nrow(people))
print(ncol(people))
print(names(people))

Đầu ra:

[1] 3
[1] 3
[1] "name" "age"  "city"

str() hiển thị kiểu dữ liệu và các giá trị đầu tiên của mỗi cột, đây là cách nhanh để kiểm tra khung dữ liệu có gì:

people <- data.frame(
  name = c("ada", "bo", "cy"),
  age = c(36, 22, 41),
  city = c("london", "paris", "rome")
)
str(people)

Đầu ra:

'data.frame':	3 obs. of  3 variables:
 $ name: chr  "ada" "bo" "cy"
 $ age : num  36 22 41
 $ city: chr  "london" "paris" "rome"

Dữ liệu thường có dạng văn bản, mỗi dòng chứa một hàng. read.csv(text = lines) chuyển những dòng này thành một data frame, dùng dòng đầu tiên làm tên cột và tự động chuyển đổi số:

lines <- c("item,qty", "tea,2", "jam,5")
orders <- read.csv(text = lines)
print(orders)
print(sum(orders$qty))

Đầu ra:

  item qty
1  tea   2
2  jam   5
[1] 7
challenge icon

Thử thách

Dễ

Hoàn thiện table_info(names, ages). Tạo một data frame với các cột name và age từ hai vector. Trả về ba dòng: Rows: kèm số hàng, Columns: kèm tên các cột được nối bằng , , và Oldest: kèm tên ở hàng có tuổi lớn nhất (nếu tuổi bằng nhau, lấy hàng đầu tiên).

Code được cung cấp đọc tên và tuổi từ hai dòng, mỗi dòng gồm các giá trị được phân tách bằng dấu phẩy, rồi in ra từng dòng được trả về.

Tự làm thử

table_info <- function(names, ages) {
  # Viết code của bạn ở đây
  character(0)
}

# Đoạn code đầu vào và đầu ra đã cho: giữ nguyên
input <- suppressWarnings(readLines(file("stdin")))
cat(table_info(strsplit(input[1], ",")[[1]], as.numeric(strsplit(input[2], ",")[[1]])), sep = "\n")
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Logic và luồng điều khiển

Tự luyện tập: Trình biên dịch R online