Cột và hàng
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 43 trên 64.
df$col và df[["col"]] trả về một cột dưới dạng vectơ thông thường, nên mọi hàm xử lý vectơ đều dùng được với cột đó. [[ ]] chấp nhận tên cột được lưu trong một biến:
people <- data.frame(
name = c("ada", "bo", "cy"),
age = c(36, 22, 41),
city = c("london", "paris", "rome")
)
print(people$age)
print(mean(people$age))
col <- "city"
print(people[[col]])Đầu ra:
[1] 36 22 41
[1] 33
[1] "london" "paris" "rome" Ta dùng cặp ngoặc vuông với cú pháp [row, column], giống như ma trận. Để trống một phía sẽ chọn tất cả, và bạn có thể chọn cột theo tên:
people <- data.frame(
name = c("ada", "bo", "cy"),
age = c(36, 22, 41),
city = c("london", "paris", "rome")
)
print(people[2, ])
print(people[, c("name", "city")])Đầu ra:
name age city
2 bo 22 paris
name city
1 ada london
2 bo paris
3 cy romeMột ô là df[row, column], và việc gán giá trị cho ô đó sẽ thay đổi giá trị của nó. Gán giá trị cho cả một cột cũng tương tự:
people <- data.frame(
name = c("ada", "bo", "cy"),
age = c(36, 22, 41),
city = c("london", "paris", "rome")
)
print(people[3, "age"])
people[3, "age"] <- 42
people$city <- toupper(people$city)
print(people)Đầu ra:
[1] 41
name age city
1 ada 36 LONDON
2 bo 22 PARIS
3 cy 42 ROMEĐể duyệt từng hàng một, hãy lặp qua seq_len(nrow(df)) và đọc từng ô bằng df[i, "col"] hoặc df$col[i]:
people <- data.frame(
name = c("ada", "bo", "cy"),
age = c(36, 22, 41),
city = c("london", "paris", "rome")
)
for (i in seq_len(nrow(people))) {
cat(people$name[i], "lives in", people[i, "city"], "\n")
}Đầu ra:
ada lives in london
bo lives in paris
cy lives in rome Thử thách
DễHoàn thành person_card(df, i). Trả về một dòng cho mỗi cột của hàng i, name: bo, gồm tên cột và giá trị trong hàng đó, theo thứ tự các cột.
Code được cung cấp đọc bảng từ đầu vào bằng read.csv(text = input): dòng đầu tiên chứa tên các cột và mỗi dòng tiếp theo là một hàng, với các giá trị được phân tách bằng dấu phẩy. Dòng cuối cùng của đầu vào chứa i, và code in ra từng dòng được trả về.
Tự làm thử
person_card <- function(df, i) {
# Viết code của bạn ở đây
character(0)
}
# Đoạn code đầu vào và đầu ra đã được cung cấp: giữ nguyên
input <- suppressWarnings(readLines(file("stdin")))
df <- read.csv(text = input[-length(input)])
i <- as.numeric(input[length(input)])
cat(person_card(df, i), 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