通过特定样本前缀子集列名称的向量

时间:2015-03-23 20:40:28

标签: r

假设我有一个看起来像这样的数据框

ca01<- c(1:10)
ca02<- c(2:11)
ca03<- c(3:12)
stuff.1<- rep('test',10)
other<- rep(9,10)

data<- data.frame(ca01,ca02,ca03,stuff.1,other)

然后我创建一个包含列名

的向量
samps<- colnames(data)

然后我想过滤此向量以仅包含以前缀“ca”开头的项目。我不想通过编写单独删除这些内容的代码行来排除stuff.1和其他内容,例如

samps<-samps[samps!='stuff.1']
samps<-samps[samps!='other']

不合适。

2 个答案:

答案 0 :(得分:4)

尝试使用grepl

> Names <- colnames(data)
> Names[grepl("^ca", Names)]
[1] "ca01" "ca02" "ca03"

答案 1 :(得分:1)

如果您希望稍后使用该向量对数据进行子集化,那么您可以使用包dplyr来执行此类操作。它有一个函数select来选择/取消选择data.frame的列,在该函数中你可以使用各种特殊的选择函数。在这种情况下,因为您要选择带前缀的列,您可以使用名为starts_with()的特殊函数。这是它的样子:

library(dplyr)

data %>% 
  select(starts_with("ca"))
#   ca01 ca02 ca03
#1     1    2    3
#2     2    3    4
#3     3    4    5
#4     4    5    6
#5     5    6    7
#6     6    7    8
#7     7    8    9
#8     8    9   10
#9     9   10   11
#10   10   11   12

您可以在其他情况下使用其他选择功能,例如ends_withcontainsone_of等。您可以在加载后输入?select来阅读相关内容包裹。

%>%是一个正向管道运算符,您可以使用它来创建多个命令的管道或链,并将数据从一个函数转发到下一个函数。