【发布时间】:2020-08-01 15:42:03
【问题描述】:
我有以下两列的数据:
-
location_country:alpha-2 代码(例如,“US”) -
location_admin_level_1: 行政级别 1('US' 应为 2 个字符)
一步,我filter() 出location_admin_level_1 字符数大于2:
librayr(dplyr)
data %>%
filter(location_country == "US",
nchar(location_admin_level_1) > 2)
...正常工作。
但是,当我尝试过滤这些 out(即,获取其余数据)时,它返回的行数少于应有的行数:
# Does not behave as expected
data %>%
filter(!(location_country == "US" & nchar(location_admin_level_1) > 2))
这也行不通
# Does not behave as expected
data %>%
filter(location_country != "US" | (location_country == "US" & nchar(location_admin_level_1) == 2))
但是当我使用 base R 过滤这些行时,它可以按预期工作:
# Works
data[data$location_country != "US" | (data$location_country == "US" & nchar(data$location_admin_level_1) == 2), ]
# Also works
data[!(data$location_country == "US" & nchar(data$location_admin_level_1) > 2), ]
为什么基本 R 解决方案可以按预期工作,而 dplyr 解决方案却不能?
(请注意:我无法创建 MWE,因为我不知道过滤行为是如何工作的,这是我的问题所关注的)
【问题讨论】:
-
@akrun,我无法创建 MWE,因为我不知道重新创建它的过滤行为(并且数据是 1000 万行)。对不起!
-
我创建了一个可重现的示例并在下面发布了一个答案。它显示了单个 NA 的行为