R 如何在字符串中选择两个字符?
我知道这可能是很容易解决的问题,但在网上查找各种示例时,我没有找到解决问题的正确示例 我在data.frame的一列下有一个短语: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,
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我建议您使用packagestringr
,这样做很简单:
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我建议您使用packagestringr
,这样做很简单:
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列是一个因素。转换为字符,然后重试