R:将字符串截断为单词

时间:2016-05-18 09:45:14

标签: r

我是R的新手,并试图用它来截断电子表格标题中的单词。例如:

Bacteria(100);Firmicutes(100);Clostridia(100);Clostridiales(100);Lachnospiraceae(100);unclassified(100);

Bacteria(100);Tenericutes(100);Mollicutes(100);Mollicutes_RF9(100);unclassified(100);unclassified(100);

所以我想将分类单元缩短为一个没有数字的单词:像Clostridia和Mollicutes。我认为可以做到,但无法解决问题。

感谢。

3 个答案:

答案 0 :(得分:1)

我们可以使用sub

sub("\\(.*", "", "Firmicutes(100)")

假设我们使用read.csv/read.table使用check.names=FALSE读取'R'中的数据,然后我们在列名称上应用相同的代码

colnames(data) <- sub("\\(.*", "", colnames(data))

如果是单个字符串

library(stringr)
 str1 <- "Bacteria(100);Firmicutes(100);Clostridia(100);Clostridiales(100);Lachnospiraceae(100);unclassified(100)"

str_extract_all(str1, "[^()0-9;]+")[[1]]
#[1] "Bacteria"        "Firmicutes"      "Clostridia"      "Clostridiales"   "Lachnospiraceae"
#[6] "unclassified"   

更新

假设我们需要提取第三个词,即“Clostridia”

sub("^([^(]+[(][^;]+;){2}(\\w+).*", "\\2", str1)
#[1] "Clostridia"

答案 1 :(得分:0)

仅使用基本命令,可以使用以下代码提取名称:

nam <- c("Bacteria(100);Tenericutes(100);Mollicutes(100);Mollicutes_RF9(100);unclassified(100);unclassified(100);")
nam <- strsplit(nam, ";")[[1]]
nam <- unname(sapply(nam, FUN=function(x) sub("\\(.*", "", x)))

nam
[1] "Bacteria"       "Tenericutes"    "Mollicutes"     "Mollicutes_RF9" "unclassified"   "unclassified"

答案 2 :(得分:0)

这是你需要的吗?还是我完全被误解了?

gsub('\\(.*\\)', '', unlist(strsplit(x, ';'))[3])
#[1] "Clostridia"

其中x是您的列名