我在R中有一个数据帧(“ GO”),带有2列“ term”和“ gene”。 “条款”列的字符类型,并具有以下条目:
GO_POSITIVE_REGULATION_OF_VIRAL_TRANSCRIPTION
GO_CARGO_RECEPTOR
GO_MATRIX ...
因此,每一列都以GO_开头,并且单词之间有_。我想删除GO_并用空格替换其他_。
我尝试使用gsub修复此问题:
GO$term <- gsub('GO', '', GO$term)
GO$term <- gsub('\\_', ' ', GO$term)
问题是,例如GO_CARGO_RECEPTOR已成为CAR RECEPTOR,但我需要它成为CARGO RECEPTOR。
我不知道如何在R中指定代码,因此在此示例中,仅删除字符串开头的GO_和字符串中间的_...
感谢您的帮助。
答案 0 :(得分:2)
x <- "GO_CARGO_RECEPTOR"
gsub("_", " ", sub("^GO_", "", x))
[1] "CARGO RECEPTOR"
{{1}仅使用sub
而不是gsub
,其余使用"GO_"
。
答案 1 :(得分:1)
仅在仅需将_
替换为以特定前缀开头的字符串中的空格并删除该前缀的情况下,您也可以使用基于PCRE regex的gsub
,例如
x <- c("GO_POSITIVE_REGULATION_OF_VIRAL_TRANSCRIPTION","POSITIVE_REGULATION_OF_VIRAL_TRANSCRIPTION")
gsub("(?:\\G(?!^)|^GO_)([^_]*)_", "\\1 ", x, perl=TRUE)
## => [1] "POSITIVE REGULATION OF VIRAL TRANSCRIPTION"
## [2] "POSITIVE_REGULATION_OF_VIRAL_TRANSCRIPTION"
请参见R demo和regex demo。
正则表达式详细信息
(?:\G(?!^)|^GO_)
-与前一个匹配项(\G(?!^)
或(|
)末尾GO_
子字符串(前缀)相匹配的非捕获组。一行的开始([^_]*)
-捕获组1(此值在替换模式中用\1
引用):_
以外的0个或多个字符_
-下划线。答案 2 :(得分:0)
借助dplyr::mutate
和一些base
函数可以在数据帧中进行操作。
library(dplyr)
GO <- GO %>%
dplyr::mutate(term = base::substring(term, 4), # remove GO_
term = base::gsub("_", " ", term))
> GO
term gene
1 POSITIVE REGULATION OF VIRAL TRANSCRIPTION 0.507617
2 CARGO RECEPTOR 0.991978
3 MATRIX 0.543001
GO <- data.frame(term = c("GO_POSITIVE_REGULATION_OF_VIRAL_TRANSCRIPTION",
"GO_CARGO_RECEPTOR",
"GO_MATRIX"),
gene = runif(3))