Невозможно отфильтровать фрейм данных из-за проблем с типом данных в R - PullRequest
1 голос
/ 03 августа 2020

Я работаю над данными 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)))

1 Ответ

2 голосов
/ 03 августа 2020

Мы можем сначала filter по счетчику и получить distinct 'Страна

library(dplyr)
data_gather %>%
       filter(Count > 300000) %>%
       distinct(Country)
...