разбить строку и объединить, чтобы удалить часть строки - PullRequest
0 голосов
/ 25 июня 2018

Я пытаюсь удалить часть строки. Лучшее, что я могу придумать - это strsplit, а затем конкатенация (возможно, есть более простой способ.

list<-as.character(c("joe_joe_ID1000", "bob_bob_ID20000"))
list<-strsplit(list, "_")

Я бы хотел, чтобы мои выходные данные были "joe joe" и "bob bob", но мне неясно, как объединить полученный список strsplit. И, возможно, есть еще более простой способ Благодарю.

Ответы [ 3 ]

0 голосов
/ 25 июня 2018

Вы можете попытаться использовать stringr str_split, а затем вставить его с помощью применения.

apply(stringr::str_split(list, "_", simplify = T)[,1:2], 1, paste, collapse=" ")
[1] "joe joe" "bob bob"

Или используйте tidyverse

library(tidyverse)
as.tibble(list) %>% 
  separate(value,letters[1:2], sep="_", remove = F, extra = "drop") %>% 
  unite(result, a,b, sep=" ")
# A tibble: 2 x 2
  value           result 
  <chr>           <chr>  
1 joe_joe_ID1000  joe joe
2 bob_bob_ID20000 bob bob

.Last.value %>% pull(result)
[1] "joe joe" "bob bob"
0 голосов
/ 25 июня 2018

Используя sapply () и paste (), вы можете сделать это:

sapply(list, function(x) paste(x[1:2], collapse = " "))
[1] "joe joe" "bob bob"

Или что-то более похожее на решение Акруна, но немного другое:

c("joe_joe_ID1000", "bob_bob_ID20000") %>% 
  sub("[^_]*$", " ", .) %>%
  gsub("_", " ", ., fixed = TRUE) %>%
  trimws()
[1] "joe joe" "bob bob"

Исходные данные:

list<-as.character(c("joe_joe_ID1000", "bob_bob_ID20000"))
list<-strsplit(list, "_")
0 голосов
/ 25 июня 2018

Один из вариантов - использовать sub, захватывать слова как группу, а затем использовать обратные ссылки (\\1 \\2) захваченной группы для форматирования указанным способом

sub("^(\\w+)_(\\w+)_.*", "\\1 \\2", list)
#[1] "joe joe" "bob bob"

ПРИМЕЧАНИЕ: list это тип. Лучше называть объекты по-разному

данные

list <- c("joe_joe_ID1000", "bob_bob_ID20000")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...