显示不同案件的否定

时间:2018-03-12 15:53:16

标签: r distinct

如何检查 distinct 参数是否仅删除了我想要的案例?

我有这个玩具数据框:

library(tidyverse)

ID = as.integer(c(1, 2, 2, 3, 3))
Program = c("P1", "P2", "P2", "P1", "P2")
From = as.Date(c("2016-10-01", "2016-07-01", "2016-01-25", "2016-05-01", "2016-04-06")) 
To = as.Date(c("2017-03-31", "2016-11-27", "2016-06-30", "2016-06-02", "2016-04-23")) 
df = tibble(ID, Program, From, To)
df

我想只保留参与同一程序的最后一个实例。它应该是这样的:

df2 = distinct(df, ID, Program, .keep_all = TRUE)
df2

这样做很好,但我的原始数据框有10万个案例,我想找到一种方法来验证我没有删除我应该保留的人。

我尝试了唯一重复的参数,但只能在单个变量上使用它们;不要将整个数据框子集化在它们上。我可以随机挑选一些这样的案例:

df2[df2$ID == 2,]

但必须采用更系统的方法。

非常感谢!

1 个答案:

答案 0 :(得分:0)

只有当您的数据框按特定顺序排列时(特别是每个ToID组中Program的递减顺序),您的答案才有效。)

因为无论如何你都处于tidyverse,这是另一种方法,它避免了必须以任何特定的顺序拥有数据框。

df %>% group_by(ID, Program) %>% filter(To == max(To))

要了解我对订单问题的意义,请尝试在df[sample(nrow(df)),]上运行此代码和代码,并注意此代码始终输出相同的行(尽管顺序不同),而代码则不然。原则上,您可以对数据框进行预先排序,但这对于您尝试解决的问题来说是过度的,这只是为了找到每个IDProgram组合的最大日期。 / p>

就验证而言,除非这些常用函数中存在任何错误,否则我不确定您关注的是什么。