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 romenrow() 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] 7Thử 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")
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
1Chuỗi chuyên sâu
Chuỗi con với substr()Định dạng với sprintf()Tách và nối chuỗiTìm kiếm trong chuỗiThay thế văn bảnÔn tập: Tạo tên người dùng10Luồng điều khiển nâng cao
Hàm switch()ifelse() dạng vector hóarepeat và breakHàm đệ quyÔn tập: phân loại điểmTự luyện tập: Trình biên dịch R online