Много строковых замен в R - PullRequest
0 голосов
/ 28 марта 2020

Как мне заменить строку для одного столбца, но с несколькими условиями.

У меня есть следующие данные

strings <- as_tibble(c("string.a","string.a", "string.b", "string.c"))

# A tibble: 4 x 1
  value       
  <chr>       
1 string_alice
2 string_alice
3 string_bob  
4 string_joe 

и следующие замены

replacements <- c("alice", "bob", "joe")
conditions <- c(".a", ".b", ".c")

Полученные данные будут

result <- as_tibble(c("string_alice", "string_bob", "string_joe"))

# A tibble: 4 x 1
  value       
  <chr>       
1 string_alice
2 string_alice
3 string_bob  
4 string_joe

Я рассмотрел какую-то таблицу сопоставления, но мне не ясно, как передать таблицу сопоставления в функцию замены строк.

Ответы [ 2 ]

1 голос
/ 28 марта 2020
nm = setNames(replacements, gsub("\\.", "", conditions))
sapply(strsplit(strings$value, "\\."), function(x){
    paste(c(x[1], nm[x[2]]), collapse = ".")
})

Данные

strings = structure(list(value = c("string.a", "string.a", "string.b", 
"string.c")), row.names = c(NA, -4L), class = c("tbl_df", "tbl", 
"data.frame"))
0 голосов
/ 28 марта 2020

Мы можем использовать gsubfn

library(gsubfn)
sub("\\.", "_",  gsubfn("(\\w+)$", setNames(as.list(replacements), 
       sub("\\.", "", conditions)), strings$value))  
#[1] "string_alice" "string_alice" "string_bob"   "string_joe" 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...