R 如何在字符串中选择两个字符?

R 如何在字符串中选择两个字符?,r,gsub,R,Gsub,我知道这可能是很容易解决的问题,但在网上查找各种示例时,我没有找到解决问题的正确示例 我在data.frame的一列下有一个短语: ID p_IIJSJ;o_OODJ;l_jjjjw;g_jjjdI p_HHDU;o_WWj;l_WWOJ;g_jjjDI 我想选择两个词:一个是以p_开头的词,另一个是以g_开头的词,去掉它们之间的所有剩余词。。。。你对怎么做有什么建议吗?我正在尝试使用gsub,但目前没有成功。 提前非常感谢您使用strrspilt的方法 sapply(strsplit(x,

我知道这可能是很容易解决的问题,但在网上查找各种示例时,我没有找到解决问题的正确示例

我在data.frame的一列下有一个短语:

ID
p_IIJSJ;o_OODJ;l_jjjjw;g_jjjdI
p_HHDU;o_WWj;l_WWOJ;g_jjjDI
我想选择两个词:一个是以p_开头的词,另一个是以g_开头的词,去掉它们之间的所有剩余词。。。。你对怎么做有什么建议吗?我正在尝试使用
gsub
,但目前没有成功。
提前非常感谢您

使用
strrspilt
的方法

sapply(strsplit(x, ';'), function(i) paste(grep('p_|g_', i, value = TRUE), collapse = ';'))
#[1] "p_IIJSJ;g_jjjdI"
或者如果顺序总是相同的(正如@Jaap提到的)


使用
strrspilt
的方法

sapply(strsplit(x, ';'), function(i) paste(grep('p_|g_', i, value = TRUE), collapse = ';'))
#[1] "p_IIJSJ;g_jjjdI"
或者如果顺序总是相同的(正如@Jaap提到的)


我们可以使用
sub

sub(";*(p_\\w+).*;*(g_\\w+).*", "\\1;\\2", df1$ID)
#[1] "p_IIJSJ;g_jjjdI" "p_HHDU;g_jjjDI" 
gsub("[^pg]_\\w+;", "", df1$ID)
#[1] "p_IIJSJ;g_jjjdI" "p_HHDU;g_jjjDI" 
或使用
gsub

sub(";*(p_\\w+).*;*(g_\\w+).*", "\\1;\\2", df1$ID)
#[1] "p_IIJSJ;g_jjjdI" "p_HHDU;g_jjjDI" 
gsub("[^pg]_\\w+;", "", df1$ID)
#[1] "p_IIJSJ;g_jjjdI" "p_HHDU;g_jjjDI" 
数据
df1我们可以使用
sub

sub(";*(p_\\w+).*;*(g_\\w+).*", "\\1;\\2", df1$ID)
#[1] "p_IIJSJ;g_jjjdI" "p_HHDU;g_jjjDI" 
gsub("[^pg]_\\w+;", "", df1$ID)
#[1] "p_IIJSJ;g_jjjdI" "p_HHDU;g_jjjDI" 
或使用
gsub

sub(";*(p_\\w+).*;*(g_\\w+).*", "\\1;\\2", df1$ID)
#[1] "p_IIJSJ;g_jjjdI" "p_HHDU;g_jjjDI" 
gsub("[^pg]_\\w+;", "", df1$ID)
#[1] "p_IIJSJ;g_jjjdI" "p_HHDU;g_jjjDI" 
数据
df1我建议您使用package
stringr
,这样做很简单:

library(stringr)

a <- "p_IIJSJ;o_OODJ;l_jjjjw;g_jjjdI"
b <- "p_HHDU;o_WWj;l_WWOJ;g_jjjDI"

str_extract(string = a, pattern = c("p_[a-zA-Z]+", "g_[a-zA-Z]+"))

# [1] "p_IIJSJ" "g_jjjdI"

str_extract(string = b, pattern = c("p_[a-zA-Z]+", "g_[a-zA-Z]+"))

# [1] "p_HHDU"  "g_jjjDI"
库(stringr)

a我建议您使用package
stringr
,这样做很简单:

library(stringr)

a <- "p_IIJSJ;o_OODJ;l_jjjjw;g_jjjdI"
b <- "p_HHDU;o_WWj;l_WWOJ;g_jjjDI"

str_extract(string = a, pattern = c("p_[a-zA-Z]+", "g_[a-zA-Z]+"))

# [1] "p_IIJSJ" "g_jjjdI"

str_extract(string = b, pattern = c("p_[a-zA-Z]+", "g_[a-zA-Z]+"))

# [1] "p_HHDU"  "g_jjjDI"
库(stringr)

当单词总是以相同的顺序排列时:
sapply(strsplit(df$ID,“;”),函数(x)粘贴(x[c(1,4)],collapse=';”)
谢谢,我收到这个错误,strsplit(df$ID,“;”):非字符参数,因为您的ID列是一个因素。转换为字符并在单词总是按相同顺序时重试:
sapply(strsplit(df$ID,“;”)、函数(x)粘贴(x[c(1,4)]、collapse=”;”)
谢谢我收到这个错误,strsplit(df$ID,“;”)中有两个方法错误:非字符参数,因为您的ID列是一个因素。转换为字符,然后重试