拆分字符串并连接以删除字符串的一部分
split string and concatenating to remove a portion of string
我正在尝试删除字符串的一部分。我能想到的最好的方法是 strsplit 然后连接(也许有更简单的方法。
list<-as.character(c("joe_joe_ID1000", "bob_bob_ID20000"))
list<-strsplit(list, "_")
我希望我的输出是 "joe joe" 和 "bob bob" 但我不清楚如何连接生成的 strsplit 列表。也许还有更简单的方法
谢谢。
一种选择是使用sub
,将单词捕获为一组,然后使用捕获组的反向引用(\1 \2
)以指定的方式格式化
sub("^(\w+)_(\w+)_.*", "\1 \2", list)
#[1] "joe joe" "bob bob"
注意:list
是一种类型。最好以不同的方式命名对象
数据
list <- c("joe_joe_ID1000", "bob_bob_ID20000")
您可以尝试使用 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"
使用 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, "_")
我正在尝试删除字符串的一部分。我能想到的最好的方法是 strsplit 然后连接(也许有更简单的方法。
list<-as.character(c("joe_joe_ID1000", "bob_bob_ID20000"))
list<-strsplit(list, "_")
我希望我的输出是 "joe joe" 和 "bob bob" 但我不清楚如何连接生成的 strsplit 列表。也许还有更简单的方法 谢谢。
一种选择是使用sub
,将单词捕获为一组,然后使用捕获组的反向引用(\1 \2
)以指定的方式格式化
sub("^(\w+)_(\w+)_.*", "\1 \2", list)
#[1] "joe joe" "bob bob"
注意:list
是一种类型。最好以不同的方式命名对象
数据
list <- c("joe_joe_ID1000", "bob_bob_ID20000")
您可以尝试使用 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"
使用 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, "_")