我需要通过多个“OR”条件过滤一个嵌套框架。听我解释
我有一个包含100万个观察结果的矩阵(total)。其中一列(id)包含从1到6000的id号。这意味着许多行具有重复的id号。
我之前随机抽取了500个唯一的身份证号码。
random.id <- sample(abc, 500, replace=F)
我想过滤原始数据集中 id 列与 random.id 中的任何值匹配的那些行。换句话说,我想用许多“或”条件进行过滤。但是因为有500个条件,我不能把它们都打出来。
我试过使用%in%操作符。
filtered <- total %>%
filter(id %in% random.id)
如果该命令按预期工作,则新的过滤框架应包含500个唯一的 id 值。
length(unique(filtered$id))
不幸的是,这个数字远远低于500。我重新为 random.id 做了随机样本,但是新的框架中唯一ID的数量总是在500以下。
我该怎么办?
3条答案
按热度按时间wnrlj8wa1#
由于您使用的是
dplyr
,下面是@Jon Spring在dplyr
语法中的答案版本。看起来您的问题确实与
abc
的内容有关。注意:
dplyr::n_distinct
省去了对length
和unique
的两次调用。qoefvg9y2#
你没有提到
abc
是从哪里来的,但是如果它有重复的,那么你可能实际上没有画出500个唯一的id号。当你从一个有重复的向量中提取一个样本时,即使你不替换,一些样本本身也可能是重复的,因为你可能是在对同一个id的不同示例进行采样。
如果源分布本身有重复值,我们可以从样本中获得非唯一值而无需替换:
或者用你的例子:
tkqqtvp13#
我使用这个函数:
在您的案例中: