【发布时间】:2012-11-28 16:17:22
【问题描述】:
我想通过正则表达式从数据框中选择多列。问题是,我想使用存储在另一个框架中的成对的单词来做到这一点。更具体地说,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)) }
这是我卡住的地方。非常感谢您的帮助。
【问题讨论】:
-
@Andrie:抱歉确实发布并立即重新格式化,但我不够快