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] 3paste() 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"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")
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