这似乎是dplyr过滤中非常奇怪的行为,有人可以告诉我我在哪里犯错,或者下面是否也出现在你的机器上。先感谢您。
当我尝试使用dplyr过滤数据框时,它在使用原始字符串时工作正常,但在粘贴或使用变量时却没有(至少在我的机器上)。
library(dplyr)
###Recreate data
country <- "ZAF"
df <- data.frame(iso3c=as.character("ZAF"),
country=as.character("South Africa"),
level=as.integer(4),stringsAsFactors = FALSE)
问题是这些过滤了ZAF行,而不是保留它。
###Filters out the ZAF row, none of these work
df.nowork1 <- filter(df, iso3c==country)
df.nowork2 <- filter(df, iso3c==paste(country))
df.nowork3 <- filter(df, iso3c==paste0("'",country,"'"))
我希望他们使用变量:
##Works
df.works <- filter(df, iso3c=="ZAF")
df.works2 <- filter(df, iso3c==paste("ZAF"))
答案 0 :(得分:3)
我们可以通过指定不使用bang bang(!!
)
df %>%
filter(iso3c== !!country)
# iso3c country level
#1 ZAF South Africa 4
或者另一种方法是从.GlobalEnv
filter(df, iso3c== .GlobalEnv$country)
# iso3c country level
#1 ZAF South Africa 4
在这里,&#39; df&#39;有一个名为&#39; country&#39;的列,所以在环境中,在指定&#39; country&#39;时,它正在检查列而不是数据集外的对象
df %>%
select(country)
# country
#1 South Africa
答案 1 :(得分:1)
我对保持一个名字感到羞怯变量同名。
ctry <- country
works <- filter(df, iso3c==ctry)