Menu
CoddyTech

Tách và nối chuỗi

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 3 trên 64.

strsplit(x, split) cắt một chuỗi (string) tại mỗi dấu phân cách. Hàm này trả về một danh sách gồm một vector ký tự cho mỗi chuỗi đầu vào, vì vậy hãy dùng [[1]] để lấy các phần của một chuỗi.

csv <- "red,green,blue"
parts <- strsplit(csv, ",")[[1]]
print(parts)
print(length(parts))

Đầu ra:

[1] "red"   "green" "blue" 
[1] 3

paste() hoạt động theo chiều ngược lại. Với collapse, hàm này nối các phần tử của một vector thành một chuỗi duy nhất, với văn bản collapse nằm giữa chúng. sep nằm giữa các đối số, theo từng phần tử.

words <- c("one", "two", "three")
print(paste(words, collapse = "-"))
print(paste(words, 1:3, sep = "_"))

Đầu ra:

[1] "one-two-three"
[1] "one_1"   "two_2"   "three_3"

Văn bản đầu vào thường có khoảng trắng xung quanh dấu phân cách. trimws() xóa khoảng trắng ở đầu và cuối mỗi phần tử:

raw <- "  apples , pears,plums  "
items <- trimws(strsplit(raw, ",")[[1]])
print(items)
print(paste(rev(items), collapse = " | "))

Đầu ra:

[1] "apples" "pears"  "plums" 
[1] "plums | pears | apples"

Khi áp dụng strsplit() cho một vectơ, hàm trả về một phần tử danh sách cho mỗi chuỗi, vì vậy mỗi dòng đầu vào giữ lại các phần riêng của nó:

lines <- c("a,b", "c,d,e")
parts <- strsplit(lines, ",")
print(length(parts))
print(parts[[2]])

Đầu ra:

[1] 2
[1] "c" "d" "e"
challenge icon

Thử thách

Dễ

Hoàn thiện hashtags(line). Dòng này chứa các thẻ được phân tách bằng dấu phẩy, có thể có khoảng trắng xung quanh. Trả về một chuỗi trong đó mỗi thẻ đều có tiền tố #, các thẻ được phân tách bằng một dấu cách: r, data ,stats trở thành #r #data #stats.

Code được cung cấp đọc dòng này và in ra giá trị trả về.

Tự làm thử

hashtags <- function(line) {
  # Viết code của bạn ở đây
  line
}

# Đoạn code đầu vào/đầu ra có sẵn: giữ nguyên
input <- suppressWarnings(readLines(file("stdin")))
cat(hashtags(input[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