使用strsplit拆分字符串并创建拆分的一部分的新向量

时间:2014-05-17 14:56:42

标签: r split strsplit

我有一个矩阵,其列名都是“BT549- [数字]”,所以BT549-0,BT549-1等等。我正在尝试删除BT549-前缀并仅保留数字。到目前为止,将连字符上的名称拆分工作正常,但删除字符串已证明更加困难。例如,如果矩阵名为dset,

a <- strsplit(colnames(dset), "-")
b <- unlist(a)

head(b)
[1] "BT549" "0"     "BT549" "10"    "BT549" "11" 

我尝试拆分字符串并使用for循环保留每个字符串的第二个索引:

a <- for(i in colnames(dset)) {
       unlist(strsplit(colnames(dset[i]), split='-', fixed=TRUE))[2]
     }
# Error in strsplit(colnames(dset[i]), split = "-", fixed = TRUE) : 
#   non-character argument

但我不明白这个错误。我怀疑有一种简单的方法可以做到这一点,我只是没想到。任何和所有的建议都非常感激。 感谢。

2 个答案:

答案 0 :(得分:2)

如果您的唯一目的是删除“BT549-”,我的解决方案应该有效,并且不会利用strsplit,但更容易利用stringr::str_replace_all

library(stringr)

colnames(dset) <- str_replace_all(colnames(dset), "BT549-", "")

答案 1 :(得分:2)

您无法将for的结果分配给这样的变量。你可以只提取b的每一个元素:

colnames(dset)<-b[c(FALSE,TRUE)]

您也可以只提取a的每个元素的第二个元素:

colnames(dset)<-sapply(a,function(x) a[2])

或者,更简洁:

colnames(dset)<-sapply(a,`[`,2)

您甚至可以在sub中使用base

colnames(dset)<-sub('^BT549-','',colnames(dset))