Как удалить каждый экземпляр столбца во фрейме данных, который не содержит ровно двух слов? - PullRequest
0 голосов
/ 10 июня 2019

У меня есть такой фрейм данных:

     species        |    BIN      |    collectors  |  country      | grade
--------------------------------------------------------------------------
Tilapia guineensis  |BOLD:AAL5979 |    C.D. Nwani  |     Nigeria   | NA
Tilapia             |BOLD:AAB9042 |    C.D. Nwani  |     Nigeria   | NA
Fundulus rubrifrons |BOLD:AAI7245 |  John Donavan  |  United States| NA
Eutrigla gurnardus  |BOLD:AAC0262 |Hermann Neumann |    North Sea  | NA
Sprattus            |BOLD:AAE9187 |Hermann Neumann |    North Sea  | NA
Gadus morhua        |BOLD:ACF1143 |Hermann Neumann |    North Sea  | NA
Tilapia zillii      |BOLD:AAB9042 |     C.D. Nwani |      Nigeria  | NA
Gadus               |BOLD:ACF1169 |   Angela Cicia |  United States| NA

В основном, некоторые из названий видов неполны и содержат только одно слово.Я хочу удалить каждый экземпляр фрейма данных, в котором название вида не имеет ровно двух слов, есть ли простой способ сделать это?

В случае первого фрейма данных, который я представил, яожидал что-то вроде этого:

   species          |    BIN      |    collectors  |  country      | grade
--------------------------------------------------------------------------
Tilapia guineensis  |BOLD:AAL5979 |    C.D. Nwani  |     Nigeria   | NA
Fundulus rubrifrons |BOLD:AAI7245 |  John Donavan  |  United States| NA
Eutrigla gurnardus  |BOLD:AAC0262 |Hermann Neumann |    North Sea  | NA
Gadus morhua        |BOLD:ACF1143 |Hermann Neumann |    North Sea  | NA
Tilapia zillii      |BOLD:AAB9042 |     C.D. Nwani |      Nigeria  | NA

Заранее благодарен за любые ответы

Ответы [ 3 ]

0 голосов
/ 10 июня 2019

Мы можем использовать str_count, чтобы подсчитать количество слов в «видах» и отфильтровать те строки, которые содержат более одного слова

library(tidyverse)
df1 %>%
    filter(str_count(species, "\\w+") == 2)
#              species          BIN      collectors       country grade
#1  Tilapia guineensis BOLD:AAL5979      C.D. Nwani       Nigeria    NA
#2 Fundulus rubrifrons BOLD:AAI7245    John Donavan United States    NA
#3  Eutrigla gurnardus BOLD:AAC0262 Hermann Neumann     North Sea    NA
#4        Gadus morhua BOLD:ACF1143 Hermann Neumann     North Sea    NA
#5      Tilapia zillii BOLD:AAB9042      C.D. Nwani       Nigeria    NA

Или с base R с использованием gregexpr и lengths

subset(df1, lengths(gregexpr("\\w+", species)) == 2)
0 голосов
/ 10 июня 2019

Мы можем использовать strsplit и lengths в базе R:

subset(DF, lengths(strsplit(species, " ")) == 2)

Выход:

              species          BIN      collectors       country grade
1  Tilapia guineensis BOLD:AAL5979      C.D. Nwani       Nigeria    NA
3 Fundulus rubrifrons BOLD:AAI7245    John Donavan United States    NA
4  Eutrigla gurnardus BOLD:AAC0262 Hermann Neumann     North Sea    NA
6        Gadus morhua BOLD:ACF1143 Hermann Neumann     North Sea    NA
7      Tilapia zillii BOLD:AAB9042      C.D. Nwani       Nigeria    NA
0 голосов
/ 10 июня 2019

Предполагая, что ввод DF, воспроизводимый в примечании, в конце, используйте указанное регулярное выражение для grep для species с двумя (или более) словами.Если должно быть ровно два слова, используйте ^\\S+ \\S+$.Пакеты не используются.

subset(DF, grepl("\\S+ \\S+", species))

предоставление:

              species          BIN      collectors       country grade
1  Tilapia guineensis BOLD:AAL5979      C.D. Nwani       Nigeria    NA
3 Fundulus rubrifrons BOLD:AAI7245    John Donavan United States    NA
4  Eutrigla gurnardus BOLD:AAC0262 Hermann Neumann     North Sea    NA
6        Gadus morhua BOLD:ACF1143 Hermann Neumann     North Sea    NA
7      Tilapia zillii BOLD:AAB9042      C.D. Nwani       Nigeria    NA

Примечание

Lines <- "     species        |    BIN      |    collectors  |  country      | grade
Tilapia guineensis  |BOLD:AAL5979 |    C.D. Nwani  |     Nigeria   | NA
Tilapia             |BOLD:AAB9042 |    C.D. Nwani  |     Nigeria   | NA
Fundulus rubrifrons |BOLD:AAI7245 |  John Donavan  |  United States| NA
Eutrigla gurnardus  |BOLD:AAC0262 |Hermann Neumann |    North Sea  | NA
Sprattus            |BOLD:AAE9187 |Hermann Neumann |    North Sea  | NA
Gadus morhua        |BOLD:ACF1143 |Hermann Neumann |    North Sea  | NA
Tilapia zillii      |BOLD:AAB9042 |     C.D. Nwani |      Nigeria  | NA
Gadus               |BOLD:ACF1169 |   Angela Cicia |  United States| NA"
DF <- read.table(text = Lines, header = TRUE, sep = "|", strip.white = TRUE, as.is = TRUE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...