下面是可重现的数据
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发布于 2016-05-27 00:43:38
保留唯一值等效于删除重复的值。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列的第一个实例。只要您的数据是按起始日期排序的,这将为您提供根据您的请求更改证书的日期。
https://stackoverflow.com/questions/37466572
复制相似问题