0

我有两个具有相同列名的数据框,示例如下。

>dataframe1
   Company_name   Transaction_Code  Sum
1:    First             2000        234
2:    First             3000        562
3:    First             4000        105
4:   Second             8888        740
5:    Third             9000        325
6:    Third             4000        145
7:     BBB              1000         28
8:     BBB              3535        100
>dataframe2
   Company_name   Transaction_Code  Sum
1:    First             2000        340
2:    First             3000        620
3:    First             4000        050
4:   Second             8888        400
5:    Third             9000        250
6:    Third             4000        450
7:     BBB              1000         27

我正在尝试通过前两列的值检查条目,以查看 dataframe1 中的哪些条目在 dataframe2 中丢失。如图所示,dataframe1 具有 dataframe2 中缺少的条目 #8。我已经看到了 dplyr::anti.join 解决方案,用于具有一个条件/列的此类任务,但是当我需要通过两列中的值来判断条目时,它似乎不起作用。

PS我没有包括任何可重现的例子,因为我没有看到任何意义。我远不是 R 或一般编码方面的专家,所以这个问题可能以某种方式缺乏,抱歉。

4

2 回答 2

1

setdiff()可能是您正在寻找的:

df1 <- data.frame(company = c("first","first","first","second","third","third","BBB","BBB"),
                  transac = c(2000,3000,4000,8888,9000,4000,1000,3535),
                  sum=c(234,562,105,740,325,145,28,100))

df2 <- data.frame(company = c("first","first","first","second","third","third","BBB"),
                  transac = c(2000,3000,4000,8888,9000,4000,1000),
                  sum=c(340,620,050,400,250,450,27))


setdiff(df1[,1:2],df2[,1:2])

返回

 company transac
1     BBB    3535
于 2021-10-28T12:21:16.363 回答
1

这可以通过anti_join()指定要用于连接的列来完成。

library(dplyr)
library(tibble)
dataframe1 = tribble(
  ~Company_name,  ~Transaction_Code,  ~Sum,
     "First",             2000,        234,
     "First",             3000,        562,
     "First",             4000,        105,
     "Second",            8888,        740,
     "Third",             9000,        325,
     "Third",             4000,        145,
     "BBB",               1000,         28,
     "BBB",               3535,        100
)

dataframe2 = tribble(
  ~Company_name,   ~Transaction_Code,  ~Sum,
      "First",             2000,        340,
      "First",             3000,        620,
      "First",             4000,        050,
      "Second",            8888,        400,
      "Third",             9000,        250,
      "Third",             4000,        450,
      "BBB",               1000,        27
)

anti_join(dataframe1, dataframe2, by = c("Company_name", "Transaction_Code"))
于 2021-10-28T12:23:51.310 回答