我想通过正则表达式从数据框中选择多个列。问题是,我想使用存储在另一帧中的单词对来这样做。更具体地说,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)) }
这就是我被困住的地方。非常感谢你的帮助。
答案 0 :(得分:4)
您没有在最后一个命令中使用names
函数:
替换
print(grep(foo, mycounts))
与
print(grep(foo, names(mycounts)))