这是可重复的数据
df <- structure(list(df_A = structure(c(1L, 2L, 2L, 3L, 3L, 4L, 5L,
5L, 5L, 6L, 7L, 7L, 8L), .Label = c("2016-05-10", "2016-05-11",
"2016-05-12", "2016-05-14", "2016-05-15", "2016-05-17", "2016-05-18",
"2016-05-19"), class = "factor"), df_B = structure(1:13, .Label = c("SO-101",
"SO-102", "SO-103", "SO-104", "SO-105", "SO-106", "SO-107", "SO-108",
"SO-109", "SO-110", "SO-111", "SO-112", "SO-113"), class = "factor"),
df_C = c(1113L, 2312L, 2312L, 2314L, 2314L, 2546L, 2315L,
2315L, 2315L, 5689L, 2546L, 2546L, 2312L)), .Names = c("df_A",
"df_B", "df_C"), class = "data.frame", row.names = c(NA, -13L
))
> df1
df_A df_B df_C
1 2016-05-10 SO-101 1113
2 2016-05-11 SO-102 2312
3 2016-05-11 SO-103 2312
4 2016-05-12 SO-104 2314
5 2016-05-12 SO-105 2314
6 2016-05-14 SO-106 2546
7 2016-05-15 SO-107 2315
8 2016-05-15 SO-108 2315
9 2016-05-15 SO-109 2315
10 2016-05-17 SO-110 5689
11 2016-05-18 SO-111 2546
12 2016-05-18 SO-112 2546
13 2016-05-19 SO-113 2312
let say
df_B column represents the production order.
df_C column represents the product certificate
对于每个生产订单,可以存在与先前订单相同的证书,也可以是不同的证书。我想知道产品证书的更改日期。 所以我想通过使用unique来对df_c列中的行进行子集化,但是在这种情况下,我将使用不同的生产订单来松散行,但是后来生成的证书相同。
df2是我想要的数据帧。
df2
df_A df_B df_C
1 2016-05-10 SO-101 1113
2 2016-05-11 SO-102 2312
3 2016-05-12 SO-104 2314
4 2016-05-14 SO-106 2546
5 2016-05-15 SO-107 2315
6 2016-05-17 SO-110 5689
7 2016-05-18 SO-111 2546
8 2016-05-19 SO-113 2312
答案 0 :(得分:2)
保留唯一值相当于删除重复值。 duplicated
返回重复行的索引,因此我们可以过滤出第1列和第3列中重复的行:
df[!duplicated(df[c(1, 3)]), ]
df_A df_B df_C
1 2016-05-10 SO-101 1113
2 2016-05-11 SO-102 2312
4 2016-05-12 SO-104 2314
6 2016-05-14 SO-106 2546
7 2016-05-15 SO-107 2315
10 2016-05-17 SO-110 5689
11 2016-05-18 SO-111 2546
13 2016-05-19 SO-113 2312
另外值得指出的是,默认duplicated
参数为fromLast = FALSE
,因此这将保留每个df_A
和df_C
列的第一个实例。只要您的数据按日期开始排序,这将为您提供证书在您请求时更改的日期。