2016-06-28 147 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 
相关问题