我有一个数据框。它的一部分看起来像这样:
PN Supplier Date1 Q_QTY Price B_QTY Date2 1023242 1 6/2/2017 1 9.32 250 7/1/2019 1023242 1 6/2/2017 1 8.81 100 5/3/2017 1023242 1 6/2/2017 1 9.50 200 7/1/2019 1023242 2 "" 1 152.26 1 4/9/2019 1023242 1 "" 0 9.32 250 7/1/2019 1023242 1 "" 0 8.81 100 5/3/2017 1023242 1 "" 0 9.50 200 7/1/2019
PN有很多,每个PN可以由不同的供应商生产。由于某些原因,有一些“重复”记录具有相同的记录,除了“ Date1” (如第一行和第五行)之外,所有列都相同。
我希望输出中仅包含基于相同PN和供应商的Date1列中不包含“”的行,并且也希望包含具有相同PN但供应商不同的行,尽管Date1为“”。
这是我想要的输出,如下所示:
PN Supplier Date1 Q_QTY Price B_QTY Date2 1023242 1 6/2/2017 1 9.32 250 7/1/2019 1023242 1 6/2/2017 1 8.81 100 5/3/2017 1023242 1 6/2/2017 1 9.50 200 7/1/2019 1023242 2 "" 1 152.26 1 4/9/2019
答案 0 :(得分:2)
我们可以使用distinct
library(dplyr)
df1 %>%
distinct(PN, Supplier, Price, B_QTY, .keep_all = TRUE)
# PN Supplier Date1 Q_QTY Price B_QTY Date2
#1 1023242 1 6/2/2017 1 9.32 250 7/1/2019
#2 1023242 1 6/2/2017 1 8.81 100 5/3/2017
#3 1023242 1 6/2/2017 1 9.50 200 7/1/2019
#4 1023242 2 1 152.26 1 4/9/2019
或者使用duplicated
中的base R
df1[!duplicated(df1[c(1:2, 5:6)]),]
df1 <- structure(list(PN = c(1023242L, 1023242L, 1023242L, 1023242L,
1023242L, 1023242L, 1023242L), Supplier = c(1L, 1L, 1L, 2L, 1L,
1L, 1L), Date1 = c("6/2/2017", "6/2/2017", "6/2/2017", "", "",
"", ""), Q_QTY = c(1L, 1L, 1L, 1L, 0L, 0L, 0L), Price = c(9.32,
8.81, 9.5, 152.26, 9.32, 8.81, 9.5), B_QTY = c(250L, 100L, 200L,
1L, 250L, 100L, 200L), Date2 = c("7/1/2019", "5/3/2017", "7/1/2019",
"4/9/2019", "7/1/2019", "5/3/2017", "7/1/2019")),
class = "data.frame", row.names = c(NA,
-7L))