【问题标题】:Selecting columns by regex created from different frame通过从不同框架创建的正则表达式选择列
【发布时间】: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:抱歉确实发布并立即重新格式化,但我不够快

标签: r regex


【解决方案1】:

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

替换

print(grep(foo, mycounts))

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

【讨论】:

    猜你喜欢
    • 2015-08-28
    • 1970-01-01
    • 1970-01-01
    • 2021-01-21
    • 1970-01-01
    • 2019-03-30
    • 2015-08-22
    • 2021-02-03
    • 1970-01-01
    相关资源
    最近更新 更多