2013-02-21 43 views
0

如何在unix中grep列表的子列表,如grep -f? 說我有一個數據幀來自dataframe的主列表中的R grep子列表

A 1 3 4 
B 4 5 6 
C 7 8 9 
D 1 3 4 
E 1 3 3 
F 2 4 5 

,我只需要

A 1 3 4 
C 7 8 9 
E 1 3 3 
F 2 4 5 

通過像grep c(A C E F)?非常感謝!

回答

2

我假設ACEF是rownames。 Assumming您的數據幀被稱爲dd,基本的子集應該做的伎倆:

##Select rows where the rownames are in a particular vector 
dd[rownames(dd) %in% c("A", "C", "E", "F"), ] 
+0

謝謝!我想更進一步,因爲數據框是128行,包含105k行(128 x 105k),我的rownames ID是3500保存在不同的文件「subsetID.txt」中。如何檢索數據框的子集?再次感謝! – Ivan 2013-02-21 20:13:30

+0

希望有一種方法可以將所有答案組合在一起!我試圖從另一個文件中grep一個向量/列,這是我的數據框的colnames的子集。子集<-read.table(「list.tab」,header = F) dfrm [grepl(subset [,1],dfrm [,1]),]但沒有穿過。任何線索?再次感謝! – Ivan 2013-02-21 21:38:58

1

假設A..F來自V1列,您可以使用grepl返回TRUE/FALSE

# gives TRUE when V1 != B, D 
df[grepl("[^BD]", df$V1), ] 

# V1 V2 V3 V4 
# 1 A 1 3 4 
# 3 C 7 8 9 
# 5 E 1 3 3 
# 6 F 2 4 5 
1

如果你想完全在第一欄中爲A,C,E或F並且需要使用grep的情況則:

dfrm[ grep("^[ACEF]$", dfrm[,1]), ] 

如果這些信件是rownames然後用rownames(dfrm)代替dfrm[,1]

要創建新的對象:

newobj <- dfrm[ grep("^[ACEF]$", dfrm[,1]), ] 

您的意見:要爲R對象後load保存到會話:

save(newobj , file='newobj_file.rda') 

另存爲一個文本文件:

write.table(newobj, file='newobj_out.txt') 

有關各種選項,請參閱?write.table,並參閱Import/Export Manual(導入/導出手冊)瞭解更多背景信息。它是你的R安裝的一部分。使用你的幫助設施。在我的機器上它位於R目錄中:.... /doc/manual/R-data.html

+0

謝謝!我需要一個保存在文件中的子列表。 – Ivan 2013-02-21 20:12:53

+0

你的意思是你需要一個如何用這個結果創建一個新對象的例子嗎?''newobj < - dfrm [grep(「^ [ACEF] $」,dfrm [,1]),]' – 2013-02-21 21:08:16

+0

不,我的意思是「^ [ACEF] $」實際上是另一個文件的向量,它是dfrm的名字。謝謝! – Ivan 2013-02-21 21:25:53

0

謝謝DWin和csgillespie!訣竅是我應該更加關注的向量。

>dfrm 
A 1 3 4 
B 4 5 6 
C 7 8 9 
D 1 3 4 
E 1 3 3 
F 2 4 5 

和我的興趣的列表存儲在一個文件

subset <-read.table("infile", header=F) 
>subset 
1 A 
2 C 
3 E 
4 F 
> dfrm[rownames(dfrm) %in% subset[,1], ] 
A 1 3 4 
C 7 8 9 
E 1 3 3 
F 2 4 5 

我應該知道該子集是一個數據幀了。子集[,1]發揮了訣竅。謝謝csgillespie!