分割字符串并连接以删除字符串的一部分

时间:2018-06-25 15:32:02

标签: r concatenation strsplit

我正在尝试删除字符串的一部分。我能想到的最好的方法是先拆分然后再连接(也许有更简单的方法。

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

我希望输出为“ joe joe”和“ bob bob”,但是我不清楚如何连接生成的strsplit列表。也许有一个更简单的方法 谢谢。

3 个答案:

答案 0 :(得分:0)

一种选择是使用sub,将单词捕获为一个组,然后使用捕获的组的后向引用(\\1 \\2)以指定的方式进行格式化

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

注意:list是一种类型。最好用不同的名称命名对象

数据

list <- c("joe_joe_ID1000", "bob_bob_ID20000")

答案 1 :(得分:0)

您可以尝试使用stringr的{​​{1}},然后使用apply粘贴在一起。

str_split

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

tidyverse

答案 2 :(得分:0)

使用sapply()和paste(),您可以执行以下操作:

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

或更类似于akrun的解决方案,但略有不同:

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, "_")