Я работаю над данными covid19.analytics и создал длинную форму фрейма данных .
head(data_gather)
Результат
date Country Count
<date> <fctr> <dbl>
2020-01-22 US 1
2020-01-23 US 1
2020-01-24 US 2
2020-01-25 US 2
2020-01-26 US 5
class(data_gather)
"data.frame"
Я пытаюсь отфильтровать страны, которые иметь случаи covid Count> 300000 , а затем работать с полученными странами. Я использую строку кода ниже , чтобы отфильтровать уникальные названия стран , которые отлично работают, а дает мне 11 названий стран .
unique(data_gather[data_gather$Count > 300000,]["Country"])
Результаты
Country
<fctr>
74 US
316 Brazil
533 India
705 Russia
1163 United Kingdom
class из приведенных выше результатов кода
class(unique(data_gather[data_gather$Count > 300000,]["Country"]))
"data.frame"
Проблема:
Когда я включаю выше строку кода внутри фильтра, он не работает . Я пробовал использовать следующие параметры, но ни один из них не работает, и все возвращают 0 строк:
data_gather %>%
filter(Country %in% unique(data_gather[data_gather$Count > 300000,]["Country"]))
data_gather %>%
filter(Country %in% as.character(unique(data_gather[data_gather$Count > 300000,]["Country"])))
data_gather %>%
filter(Country %in% as.vector(unique(data_gather[data_gather$Count > 300000,]["Country"])))
data_gather %>%
filter(Country %in% as.list(unique(data_gather[data_gather$Count > 300000,]["Country"])))
data_gather %>%
filter(Country %in% lapply((unique(data_gather[data_gather$Count > 300000,]["Country"]) ), as.character)
Но когда я пытаюсь выполнить код ниже, я получаю желаемые результаты:
data_gather %>%
filter(Country %in% c("India","US","Brazil"))
Я не Я не хочу жестко кодировать название стран и фильтровать фрейм данных только на основе условий, но я не могу понять, что не так с кодом и как исправить или оптимизировать?
После оптимизации abit я все еще есть проблемы:
top_countries <- data_gather %>%
filter(Count > 300000) %>%
distinct(Country)
data_gather %>%
filter(Country %in% top_countries))
# this also doesn't work
data_gather %>%
filter(Country %in% as.vector(top_countries)))
Наконец, он сработал после предложений @ akrun
data_gather %>%
filter(Country %in% pull(top_countries)))