2016-05-17 77 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