Menu
CoddyTech

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   rome

Mộ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 
challenge icon

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")
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