Library
library(stringr)
library(dplyr)
Data
x <- c("why", "video", "cross", "extra", "deal", "authority")
length,collapse,sub string
str_length(x)
str_c(x, collapse = ", ")
str_sub(x, 1, 2)
[aeiou] pattern
str_detect(x, "[aeiou]")
str_count(x, "[aeiou]")
str_subset(x, "[aeiou]")
str_extract(x, "[aeiou]")
str_replace(x, "[aeiou]", "?")
Whitespace
‘str_pad’
x <- c("abc", "defghi")
str_pad(x, 10) # default pads on left
str_pad(x, 10, "both")
str_pad(x, 4)
‘trunc’ & ‘str_pad’
x <- c("Short", "This is a long string")
x %>%
str_trunc(10) %>%
str_pad(10, "right")
‘trim’
x <- c(" a ", "b ", " c")
str_trim(x)
str_trim(x, "left")
wraping
jabberwocky <- str_c(
"`Twas brillig, and the slithy toves ",
"did gyre and gimble in the wabe: ",
"All mimsy were the borogoves, ",
"and the mome raths outgrabe. "
)
cat(str_wrap(jabberwocky, width = 40))
#> `Twas brillig, and the slithy toves did
#> gyre and gimble in the wabe: All mimsy
#> were the borogoves, and the mome raths
#> outgrabe.
Locale sensitive
x <- "I like horses."
str_to_upper(x)
str_to_title(x)
str_to_lower(x)
String ordering and sorting
x <- c("y", "i", "k")
str_order(x)
str_sort(x)
Pattern matching
strings <- c(
"apple",
"219 733 8965",
"329-293-8753",
"Work: 579-499-7527; Home: 543.355.3679"
)
phone <- "([2-9][0-9]{2})[- .]([0-9]{3})[- .]([0-9]{4})"
str_detect(strings, phone)
str_subset(strings, phone)
str_count(strings, phone)
str_extract(strings, phone)
str_extract_all(strings, phone, simplify = TRUE)
replace value
str_replace(strings, phone, "XXX-XXX-XXXX")
str_replace_all(strings, phone, "XXX-XXX-XXXX")
Split
str_split("a-b-c", "-")
[[1]]
[1] "a" "b" "c"
str_split_fixed("a-b-c", "-", n = 2)
[,1] [,2]
[1,] "a" "b-c"
x <- "This is a sentence."
str_split(x, "")
[[1]]
[1] "T" "h" "i" "s" " " "i" "s" " " "a" " " "s" "e" "n" "t" "e" "n" "c" "e" "."
str_count(x, "")
[1] 19
Combining strings
str_c("x", "y")
str_c("x", "y", "z")
str_c("x", "y", sep = ", ")
x <- c("abc", NA)
str_c("|-", x, "-|")
str_c("|-", str_replace_na(x), "-|")
str_c("prefix-", c("a", "b", "c"), "-suffix")
name <- "Hadley"
time_of_day <- "morning"
birthday <- FALSE
str_c(
"Good ", time_of_day, " ", name,
if (birthday) " and HAPPY BIRTHDAY",
"."
)
str_c(c("x", "y", "z"), collapse = ", ")
Basic matches
x <- c("apple", "banana", "pear")
str_view(x, "an")
str_view(x, ".a.") #., which matches any character
str_view(x, "^a") # ^ to match the start of the string.
str_view(x, "a$") $ to match the end of the string.
epression
matches any digit. : matches any whitespace (e.g. space, tab,
newline). [abc]: matches a, b, or c. [^abc]: matches anything except a,
b, or c.
LS0tDQp0aXRsZTogIlIgc3RyaW5ncjogQmFzaWMgMSINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQojIyMgTGlicmFyeQ0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmxpYnJhcnkoc3RyaW5ncikNCmxpYnJhcnkoZHBseXIpDQpgYGANCiMjIyBEYXRhDQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KeCA8LSBjKCJ3aHkiLCAidmlkZW8iLCAiY3Jvc3MiLCAiZXh0cmEiLCAiZGVhbCIsICJhdXRob3JpdHkiKQ0KYGBgDQojIyMgbGVuZ3RoLGNvbGxhcHNlLHN1YiBzdHJpbmcNCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpzdHJfbGVuZ3RoKHgpDQpzdHJfYyh4LCBjb2xsYXBzZSA9ICIsICIpDQpzdHJfc3ViKHgsIDEsIDIpDQpgYGANCiMjIyBbYWVpb3VdIHBhdHRlcm4NCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpzdHJfZGV0ZWN0KHgsICJbYWVpb3VdIikNCnN0cl9jb3VudCh4LCAiW2FlaW91XSIpDQpzdHJfc3Vic2V0KHgsICJbYWVpb3VdIikNCnN0cl9leHRyYWN0KHgsICJbYWVpb3VdIikNCnN0cl9yZXBsYWNlKHgsICJbYWVpb3VdIiwgIj8iKQ0KYGBgDQojIyBXaGl0ZXNwYWNlDQojIyMgJ3N0cl9wYWQnIA0KYGBge3J9DQp4IDwtIGMoImFiYyIsICJkZWZnaGkiKQ0Kc3RyX3BhZCh4LCAxMCkgIyBkZWZhdWx0IHBhZHMgb24gbGVmdA0KDQpzdHJfcGFkKHgsIDEwLCAiYm90aCIpDQoNCnN0cl9wYWQoeCwgNCkNCmBgYA0KIyMjICAndHJ1bmMnICYgJ3N0cl9wYWQnDQpgYGB7cn0NCnggPC0gYygiU2hvcnQiLCAiVGhpcyBpcyBhIGxvbmcgc3RyaW5nIikNCg0KeCAlPiUgDQogIHN0cl90cnVuYygxMCkgJT4lIA0KICBzdHJfcGFkKDEwLCAicmlnaHQiKQ0KYGBgDQojIyMgJ3RyaW0nDQpgYGB7cn0NCnggPC0gYygiICBhICAgIiwgImIgICAiLCAgIiAgIGMiKQ0Kc3RyX3RyaW0oeCkNCnN0cl90cmltKHgsICJsZWZ0IikNCmBgYA0KDQojIyMgd3JhcGluZw0KYGBge3J9DQpqYWJiZXJ3b2NreSA8LSBzdHJfYygNCiAgImBUd2FzIGJyaWxsaWcsIGFuZCB0aGUgc2xpdGh5IHRvdmVzICIsDQogICJkaWQgZ3lyZSBhbmQgZ2ltYmxlIGluIHRoZSB3YWJlOiAiLA0KICAiQWxsIG1pbXN5IHdlcmUgdGhlIGJvcm9nb3ZlcywgIiwNCiAgImFuZCB0aGUgbW9tZSByYXRocyBvdXRncmFiZS4gIg0KKQ0KY2F0KHN0cl93cmFwKGphYmJlcndvY2t5LCB3aWR0aCA9IDQwKSkNCiM+IGBUd2FzIGJyaWxsaWcsIGFuZCB0aGUgc2xpdGh5IHRvdmVzIGRpZA0KIz4gZ3lyZSBhbmQgZ2ltYmxlIGluIHRoZSB3YWJlOiBBbGwgbWltc3kNCiM+IHdlcmUgdGhlIGJvcm9nb3ZlcywgYW5kIHRoZSBtb21lIHJhdGhzDQojPiBvdXRncmFiZS4NCmBgYA0KIyMjIExvY2FsZSBzZW5zaXRpdmUNCmBgYHtyfQ0KeCA8LSAiSSBsaWtlIGhvcnNlcy4iDQpzdHJfdG9fdXBwZXIoeCkNCnN0cl90b190aXRsZSh4KQ0Kc3RyX3RvX2xvd2VyKHgpDQpgYGANCiMjIyBTdHJpbmcgb3JkZXJpbmcgYW5kIHNvcnRpbmcNCmBgYHtyfQ0KeCA8LSBjKCJ5IiwgImkiLCAiayIpDQpzdHJfb3JkZXIoeCkNCnN0cl9zb3J0KHgpDQpgYGANCiMjIFBhdHRlcm4gbWF0Y2hpbmcNCmBgYHtyfQ0Kc3RyaW5ncyA8LSBjKA0KICAiYXBwbGUiLCANCiAgIjIxOSA3MzMgODk2NSIsIA0KICAiMzI5LTI5My04NzUzIiwgDQogICJXb3JrOiA1NzktNDk5LTc1Mjc7IEhvbWU6IDU0My4zNTUuMzY3OSINCikNCnBob25lIDwtICIoWzItOV1bMC05XXsyfSlbLSAuXShbMC05XXszfSlbLSAuXShbMC05XXs0fSkiDQpzdHJfZGV0ZWN0KHN0cmluZ3MsIHBob25lKQ0Kc3RyX3N1YnNldChzdHJpbmdzLCBwaG9uZSkNCnN0cl9jb3VudChzdHJpbmdzLCBwaG9uZSkNCnN0cl9leHRyYWN0KHN0cmluZ3MsIHBob25lKQ0Kc3RyX2V4dHJhY3RfYWxsKHN0cmluZ3MsIHBob25lLCBzaW1wbGlmeSA9IFRSVUUpDQpgYGANCiMjIyByZXBsYWNlIHZhbHVlDQpgYGB7cn0NCnN0cl9yZXBsYWNlKHN0cmluZ3MsIHBob25lLCAiWFhYLVhYWC1YWFhYIikNCnN0cl9yZXBsYWNlX2FsbChzdHJpbmdzLCBwaG9uZSwgIlhYWC1YWFgtWFhYWCIpDQpgYGANCiMjIyBTcGxpdA0KYGBge3J9DQpzdHJfc3BsaXQoImEtYi1jIiwgIi0iKQ0Kc3RyX3NwbGl0X2ZpeGVkKCJhLWItYyIsICItIiwgbiA9IDIpDQp4IDwtICJUaGlzIGlzIGEgc2VudGVuY2UuIg0Kc3RyX3NwbGl0KHgsICIiKQ0Kc3RyX2NvdW50KHgsICIiKQ0KYGBgDQojIyMgQ29tYmluaW5nIHN0cmluZ3MNCmBgYHtyfQ0Kc3RyX2MoIngiLCAieSIpDQpzdHJfYygieCIsICJ5IiwgInoiKQ0Kc3RyX2MoIngiLCAieSIsIHNlcCA9ICIsICIpDQp4IDwtIGMoImFiYyIsIE5BKQ0Kc3RyX2MoInwtIiwgeCwgIi18IikNCnN0cl9jKCJ8LSIsIHN0cl9yZXBsYWNlX25hKHgpLCAiLXwiKQ0Kc3RyX2MoInByZWZpeC0iLCBjKCJhIiwgImIiLCAiYyIpLCAiLXN1ZmZpeCIpDQoNCg0KDQpuYW1lIDwtICJIYWRsZXkiDQp0aW1lX29mX2RheSA8LSAibW9ybmluZyINCmJpcnRoZGF5IDwtIEZBTFNFDQoNCnN0cl9jKA0KICAiR29vZCAiLCB0aW1lX29mX2RheSwgIiAiLCBuYW1lLA0KICBpZiAoYmlydGhkYXkpICIgYW5kIEhBUFBZIEJJUlRIREFZIiwNCiAgIi4iDQopDQoNCnN0cl9jKGMoIngiLCAieSIsICJ6IiksIGNvbGxhcHNlID0gIiwgIikNCmBgYA0KIyMjIEJhc2ljIG1hdGNoZXMNCmBgYHtyfQ0KeCA8LSBjKCJhcHBsZSIsICJiYW5hbmEiLCAicGVhciIpDQpzdHJfdmlldyh4LCAiYW4iKQ0Kc3RyX3ZpZXcoeCwgIi5hLiIpICMuLCB3aGljaCBtYXRjaGVzIGFueSBjaGFyYWN0ZXINCnN0cl92aWV3KHgsICJeYSIpICAjIF4gdG8gbWF0Y2ggdGhlIHN0YXJ0IG9mIHRoZSBzdHJpbmcuDQpzdHJfdmlldyh4LCAiYSQiKSAgJCB0byBtYXRjaCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcuDQpgYGANCiMjIyBlcHJlc3Npb24NClxkOiBtYXRjaGVzIGFueSBkaWdpdC4NClxzOiBtYXRjaGVzIGFueSB3aGl0ZXNwYWNlIChlLmcuIHNwYWNlLCB0YWIsIG5ld2xpbmUpLg0KW2FiY106IG1hdGNoZXMgYSwgYiwgb3IgYy4NClteYWJjXTogbWF0Y2hlcyBhbnl0aGluZyBleGNlcHQgYSwgYiwgb3IgYy4NCg0KDQoNCg0K