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

3
我有一个数据框,从中创建了一个子集。我想要从该子集中减去数据框,然后使用数据框进行其他子集操作。如何实现?
例如:
     Col1 Col2 Col3 Col4
Row1
Row2
Row3
Row4

我想要的子集是:
     Col1 Col2 Col3 Col4
Row1
Row2

我希望留下来。
     Col1 Col2 Col3 Col4
Row3
Row4

这是一个更大数据集的示例,我并不是在寻找答案,而是想要创建一个不是 A 子集的另一个子集。是否有一种类似于 dataframe<-dataframe-subset? 的方法?

split(dataframe, c(1,1,2,2) - rawr
2
你是想将数据框筛选为仅包含Row1和Row2,并创建一个仅包含Row3和Row4的单独数据框吗?使用“subtract”这个词使你的问题不够清晰。 - Nick Becker
有很多方法可以实现这个。您可以使用硬索引引用来分配2个子集数据帧并删除原始数据帧。 - Hack-R
如果您不想更改子集的行名称,您可以使用newdf <- df[-row.names(subset),]来创建新数据框。 - Buzz Lightyear
创建数据框:df <- data.frame(x=1:10,y=1:10),创建子集:df1<-df[1:5,],减去:df[-(1:nrow(df1)), ] - mtoto
你有办法识别行吗?一个数据框中的行名是否对应另一个数据框中的行名?是否有唯一的ID列?原始数据框中的行是否唯一?这些问题的答案可能会因这些问题的回答而有所不同。问题应该澄清这一点,并且还应该有一个输入和输出的示例。 - G. Grothendieck
3个回答

6
您可以尝试:

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

这看起来不像是完整的答案。当他开始时,他只有一个原始的数据框,并没有提及任何关于唯一ID的内容。你可能需要重新写一下。 - Hack-R
1
没有唯一的ID。原始数据帧中的某些行可能具有相同的ID,这就是为什么我没有提到它。 - Sebastian Zeki
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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接