如何使用相同的列名过滤数据框?

时间:2016-05-17 13:12:11

标签: r filter

我正在阅读一个具有冗余列名的文本文件。

file.txt的

A  B  B  E  E
2  2  4  4  5
3  4  5  6  8

我想保留包含B和E作为列名的列。但是当我读到文件时

rt<-read.table("file.txt",header=TRUE)

  A B B.1 E E.1
  1 2 4   4 5
  2 4 5   6 8

我可以在过滤数据帧时使用正则表达式吗?

2 个答案:

答案 0 :(得分:1)

我们可以使用grep选择以namesB开头的E列。默认情况下,data.frame不允许复制列名称,并且在很多方面它实际上非常有用。

 df1[grep("^(B|E)", names(df1))]
 #  B B.1 E E.1
 #1 2   4 4   5
 #2 4   5 6   8

但是,如果我们需要保留重复的列名,我们可以在check.names=FALSE中使用read.table/read.csv读取数据集,但我不建议这样做,因为它会造成很多混乱子集化。在不使用check.names的情况下,read.table会调用make.unique来获取unique列名称,即使列名称重复也是如此。

答案 1 :(得分:1)

Another way of coding for the same   
 rt[!grepl("^A",colnames(rt))]
      B B.1 E E.1
      2   4 4   5
      4   5 6   8