如何为这里的数据框应用唯一条件

时间:2016-05-26 16:37:41

标签: r unique dplyr plyr

这是可重复的数据

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

1 个答案:

答案 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_Adf_C列的第一个实例。只要您的数据按日期开始排序,这将为您提供证书在您请求时更改的日期。