如何从另一个数据框中减去一个数据框

时间:2016-06-28 20:01:30

标签: r

我有一个数据框,我可以从中创建一个子集。我想从数据帧中减去该子集,然后将数据帧用于其他子集。怎么办呢?

示例:

     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?之类的事情

3 个答案:

答案 0 :(得分:5)

你可以尝试

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

答案 1 :(得分:4)

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

答案 2 :(得分:1)

这是另一种可能的方式:

示例 - &gt;

# 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