我想通过正则表达式从数据框中选择一些列。问题是,我想使用存储在另一个框架中的成对的单词来做到这一点。更具体地说,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 做一些事情 select next pair from mypairs extract columns from 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)) }
这是我卡住的地方。非常感谢您的帮助。