我有一个矩阵,其列名都是“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
但我不明白这个错误。我怀疑有一种简单的方法可以做到这一点,我只是没想到。任何和所有的建议都非常感激。 感谢。
答案 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))