通过从不同帧创建的正则表达式选择列

时间:2012-11-28 16:17:23

标签: regex r grep

我想通过正则表达式从数据框中选择多个列。问题是,我想使用存储在另一帧中的单词对来这样做。更具体地说,mycounts数据框的列名:

aa1 aa2 aa3 bb1 bb2 bb3 ff1 ff2 ff3 cc1 cc2 cc3 dd1 dd2 dd3

我希望提取以分离成对的帧(mypairs):

aa bb
aa cc
bb cc
cc dd
dd ff

其中aa和bb表示从mycounts中选择的列的起始模式。

我可以手动输入所需的模式:

tmpdf <- subset(mycounts.test, select=(names(mycounts)[grep('^aa|^bb',names(mycounts))]))

用tmpdf做点什么 从mypairs中选择下一对 从mycounts中提取列 用tmpdf等做同样的事情。

但总是有mypairs强制执行的输出列模式会很好。用“|”在grep而不是获得dd然后ff列我有它ff然后dd。所以我在做:

tmpdf1 <- subset(mycounts.test, select=(names(mycounts)[grep('^dd',names(mycounts))]))
tmpdf2 <- subset(mycounts.test, select=(names(mycounts)[grep('^ff',names(mycounts))]))
tmpdf <- cbind(tmpdf1, tmpdf2))

最重要的是,从第一列mypairs开始构建正则表达式是不行的:

for (i in 1:nrow(mypairs)) { foo <- paste('^', mypairs[i,1], sep=""); print(grep(foo, mycounts)) }

这就是我被困住的地方。非常感谢你的帮助。

1 个答案:

答案 0 :(得分:4)

您没有在最后一个命令中使用names函数:

替换

print(grep(foo, mycounts))

print(grep(foo, names(mycounts)))