2014-02-17 85 views
2

我有兩個大數據框。 df1有兩列(除其他外),它們是A1中的物種名稱列表和A2中的3個字母區域的列表。每行是一個獨立的記錄,這樣的值可以在兩個柱中重複多次,並且有許多行(〜9000000):當兩列中的值與第二個數據幀中的值匹配時,對數據幀進行子集

A1   A2 
species A  AFG 
species B  THA 
species B  LOP  
species C  THA 

我的第二數據幀(DF2)基本上列出每一個區域一個物種應當在發生,所以對於每個值B1,會有許多行,每一行與B2不同的值:

B1   B2 
species A AFG 
species A FLO 
species B LOP 
species B PLA 
species C THA 

我想要做的就是立場使用R對每個物種的A2(df1)中給出的值與B2(df2)中給出的值進行比較。因此,對於df1中的每一行,如果A1中的值與B1相同,則012與B212相同(如果A1 == B1 & A2 == B2),保持該行。因此,在我上面的示例中,第2行將從df1中刪除。

我試過以下,但沒有成功(沒有行刪除):在%$ DF2 B2

X < -df1 [DF1 $在%$ DF2 B1 A1%& DF1 $ A2% ,]

有什麼建議嗎?比賽功能會更合適嗎?

這也是我在Stack Overflow上提出的第一個問題 - 如果它不是很好,我很抱歉 - 歡迎任何關於如何改進問題的意見!

乾杯!

回答

4

您可以使用merge來執行此操作。只需指定正確的by.xby.y參數。這裏有一個如何做到這一點的例子:

# your data 
df1 <- read.table(text="A1   A2 
species_A  AFG 
species_B  THA 
species_B  LOP  
species_C  THA", header=TRUE) 

df2 <- read.table(text="B1   B2 
species_A AFG 
species_A FLO 
species_B LOP 
species_B PLA 
species_C THA", header=TRUE) 

# merging data.frames 
merge(df1, df2[,c("B1", "B2")], by.x=c("A1", "A2"), by.y=c("B1", "B2")) 
+0

工作完美,謝謝陰影!我沒有想過使用合併。乾杯 – kim1801

相關問題