2016-05-17 78 views
1

我正在读取一个具有多余列名称的文本文件。如何过滤具有相同列名称的数据框?

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 

我可以使用正则表达式,而筛选数据框?

回答

1

我们可以使用grep来选择names的列,以BE开头。默认情况下,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
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