2016-05-17 4 views
1

冗長な列名を持つ1つのテキストファイルを読んでいます。私は列名としてBとEを持つ列を維持したい同じ列名のデータフレームをフィルタリングする方法は?

file.txtを

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

。ファイルを読むとき

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を使用して、BまたはEで始まるnamesの列を選択することができます。デフォルトではdata.frameは列名を重複させる必要がなく、多くの点で非常に便利です。

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

しかし、我々は重複したカラム名を維持する必要がある場合、我々は、read.table/read.csvcheck.names=FALSEでデータセットを読むことができるが、サブセット化しながら、それは多くの混乱を作成するように私はそれを行うにはお勧めしません。 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 
関連する問題