2016-06-28 145 views
2

我有一個數據幀,我從中創建了一個子集。我想從數據框中減去該子集,然後使用其他子集的數據框。如何才能做到這一點?如何從另一個數據幀中減去一個數據幀

實施例:

 Col1 Col2 Col3 Col4 
Row1 
Row2 
Row3 
Row4 

我想該子集是:

 Col1 Col2 Col3 Col4 
Row1 
Row2 

,我想會留下

 Col1 Col2 Col3 Col4 
Row3 
Row4 

這是一個更大的數據集的示例,並且真的,我沒有找到答案做子集A,然後創建另一個不是子集A的子集。有沒有辦法像dataframe<-dataframe-subset?

+0

'分裂(數據框,C(1,1, 2,2)' – rawr

+2

您是否試圖過濾數據幀爲僅Row1和Row2,並創建一個單獨的Row3的數據框和Row4?使用減法這個詞讓你的問題不清楚。 –

+0

有很多方法可以做到這一點。您可以使用硬索引引用來分配2個子集的數據框和'rm'原始。 –

回答

4

你可以嘗試

final_df <- org_df[ !(org_df$ID %in% sub_df$ID), ] 
+0

這看起來不像一個完整的答案。當他開始時,他只有一個原始的數據框,並沒有提到任何關於唯一ID的信息。你可能想重新寫一點。 –

+1

沒有唯一的ID。某些原始數據幀行可能具有相同的ID,這就是爲什麼我沒有提及它 –

+1

使用'rownames(org_df)'而不是? – Ravi

4
library(dplyr) 
want<-anti_join(org_df,sub_df) 
1

這裏是另一個可能的方式:

示例 - >

# Load sqldf library 
library(sqldf) 

# Create an example Data Frame 
A <- data.frame(x=c("LA","NY","DC","SA"), 
       y=c('a','b','c','d'), 
       z = c(10,20,30,40), 
       m = c('A','B','C','D')) 

# Here is how Data Frame A looks like 
A 
    x y z m 
1 LA a 10 A 
2 NY b 20 B 
3 DC c 30 C 
4 SA d 40 D 

# Rows to subtract 
rowsToSubset <- c("1","2") 

# Just converting rows to subtract as a data frame 
rowsToSubsetDF <- data.frame(rowsToSubset) 

# Use sqldf to subtract 
B <- sqldf("SELECT t.* FROM A t WHERE t.row_names IN (SELECT 
      rowsToSubset FROM rowsToSubsetDF)",row.names = TRUE) 

# Here is how B looks like 
B 
    x y z m 
1 LA a 10 A 
2 NY b 20 B 

# Now perform the second subtraction using sqldf 
sqldf("select * from A except select * from B") 

    x y z m 
1 DC c 30 C 
2 SA d 40 D 
相關問題