2

我有一个矩阵,其列名都是“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

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

4

2 回答 2

2

strsplit如果您的唯一目标是删除“BT549-”,我的解决方案应该可以工作,并且不会利用stringr::str_replace_all.

library(stringr)

colnames(dset) <- str_replace_all(colnames(dset), "BT549-", "")
于 2014-05-17T15:11:16.980 回答
2

您不能将 a 的结果分配给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))
于 2014-05-17T15:17:49.007 回答