Переменная фильтра по количеству записей в кадре данных с несколькими переменными - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть фрейм данных с 2461 наблюдениями и 80 переменными, извлеченными из BOLD.

Scleractinia <- read_tsv("http://www.boldsystems.org/index.php/API_Public/combined?taxon=Scleractinia&format=tsv")

В настоящее время я нахожусь в процессе фильтрации этого фрейма данных.В настоящее время я отфильтровал фрейм данных по "маркерному коду" и "нуклеотидам".Я хочу дополнительно отфильтровать фрейм данных, сохранив только «видовое_имя» с более чем 5 записями.

Scleractinia.COI5P <- Scleractinia %>%
  filter(markercode == "COI-5P") %>%
  filter(str_detect(nucleotides, "[ACGT]"))
#This is a subset of the main dataset that includes only records with the marker code "COI-5P" and nucleotide sequences.

unique(Scleractinia.COI5P$species_name)
#There are 479 unique species present in this dataset. This is too many to work with so we are going to filter out species that don't have more than 5 records. 

SpeciesCount <- table(Scleractinia.COI5P$species_name)
#This creates a table of species and the number of records available in the dataset for this species. 

Я создал «SpeciesCount», чтобы определить порог 5 записей, так как было много видов с одной записью.Я не знаю, что делать с отфильтрованным Scleractinia.COI5P, чтобы 80 переменных (которые были столбцами) все еще были доступны.

Я пытался:

test <- Scleractinia.COI5P %>%
  filter(table(Scleractinia.COI5P$species_name) > 5)

Но это привело к 0 наблюдениям с 80 переменными.По сути, я хочу, чтобы 80 переменных оставались, чтобы я мог продолжить изучение того, что необходимо отфильтровать, но я хочу, чтобы в Scleractinia.COI5P были только виды с количеством записей больше или равным 5.

1 Ответ

0 голосов
/ 04 декабря 2018

Используя dplyr, вам просто нужно немного изменить работу канала.Группировать по названию вида, а затем фильтровать

library(tidyverse)

##Filter first
Scleractinia.COI5P <- Scleractinia %>%
  filter(markercode == "COI-5P") %>%
  filter(str_detect(nucleotides, "[ACGT]"))


##Group by and then filter
filtered_data_frame <- Scleractinia.COI5P %>% 
                       group_by(species_name) %>% filter(n() >=5)

##check to see if only species with over 5 records are represented
total_species <- count(filtered_data_frame, sort = TRUE) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...