在R中与旧数据的不正确比较

  • 本文关键字:不正确 比较 数据 r dplyr
  • 更新时间 :
  • 英文 :


最后一个数据:

last=structure(list(ItemRelation = 11111L, CalendarYear = 2018L, DocumentNum = 111L, 
    ship_count = 1L), .Names = c("ItemRelation", "CalendarYear", 
"DocumentNum", "ship_count"), class = "data.frame", row.names = c(NA, 
-1L))

因此,有新数据,在哪里可以是最后一个数据中的行:

new5=structure(list(ItemRelation = c(11111L, 22222L), CalendarYear = c(2018L, 
2017L), DocumentNum = c(111L, 100L), ship_count = c(1L, 23L)), .Names = c("ItemRelation", 
"CalendarYear", "DocumentNum", "ship_count"), class = "data.frame", row.names = c(NA, 
-2L))

我必须将新数据与最后一个组进行比较,仅留下这些行,而这些行中没有。

所以我做:

mydat=new5[!(new5$DocumentNum%in% last$DocumentNum), !(new5$CalendarYear%in% last$CalendarYear),
           !(new5$ItemRelation%in% last$ItemRelation)]

和结果:

  CalendarYear ship_count
2         2017         2

这不是正确的输出。
正确的输出

ItemRelation CalendarYear DocumentNum ship_count
      22222         2017         100         23

如何获得它?

您实际尝试做的是

new5[!(new5$DocumentNum %in% last$DocumentNum & 
       new5$CalendarYear %in% last$CalendarYear &
       new5$ItemRelation %in% last$ItemRelation), ]

# ItemRelation CalendarYear DocumentNum ship_count
#2       22222         2017         100         23

括号内的条件为我们提供了一个逻辑向量,该向量通过添加否定(!)符号来告诉我们new5中的哪个行存在于last中,我们告诉我们给我们提供last中不存在的行。<<<<<<<<<<<<<<<<<<<<

您可以使用基本R进行管理,并创建一个唯一字段作为键:

# key for last
last$collapsed <- paste0(last$ItemRelation, last$CalendarYear, last$DocumentNum, last$ship_count)  
# key for new5  
new5$collapsed <- paste0(new5$ItemRelation, new5$CalendarYear, new5$DocumentNum, new5$ship_count)
# filter on the key, rather than many field, and dropping the key with ,-5
new5[!new5$collapsed %in% last$collapsed,-5]
  ItemRelation CalendarYear DocumentNum ship_count
2        22222         2017         100         23

最新更新