Я недавно задал вопрос, который был очень полезен, и я попытался использовать тот же подход, чтобы найти свое решение

df<- structure(list(How = structure(c(2L, 2L, 2L, 1L, 2L, 2L, 2L, 
1L, 2L, 2L, 2L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 1L, 2L), .Label = c("Ismainbody", 
"IsmainbodyCandidate"), class = "factor"), No = c(12L, 38L, 38L, 
3L, 49L, 38L, 85L, 4L, 38L, 57L, 38L, 5L, 6L, 10L, 4L, 12L, 38L, 
7L, 8L, 61L), Main = structure(c(6L, 13L, 9L, 15L, 20L, 12L, 
1L, 19L, 10L, 2L, 7L, 18L, 4L, 14L, 5L, 16L, 8L, 3L, 17L, 11L
), .Label = c("Daa_ASTRONOMY Iso 1B of Tn-1 TTT=ASTY ", "E7EUT5_ASTRONOMY gas TTT=ASTY BOO=3 ", 
"ECO", "ECO transferase E [TTT=ASTY]", "ECO_ASTRONOMY karim,  TTT=ASTY BOO=3", 
"FSSZ1_ASTRONOMY Karim, tyBOO II brothers 74 TTT=ASTY BOO=3 ", 
"H2A1A_ASTRONOMY  tyBOO 1-A TTT=ASTY BOO=1 ", "H2A2B_ASTRONOMY tyBOO 2-B TTT=ASTY BOO=1 ", 
"H2A3_ASTRONOMY Hammer H2A tyBOO 3 TTT=ASTY BOO=1 ", "H2AV_ASTRONOMY Iso 2 of  TTT=ASTY ", 
"H2E_ASTRONOMY ufidm TTT=ASTY ", "Hammer [TTT=ASTY]", "Hammer H2A tyBOO 2-C [TTT=ASTY]", 
"Iso 2 of Deleted in house [TTT=ASTY]", "Iso 2019 of denis [TTT=ASTY]", 
"K2C74_ASTRONOMY karim, tyBOO II  TTT=ASTY BOO=1", "KAR_ASTRONOMY karim, tyBOO TTT=ASTY BOO=1 BBS", 
"karim, tyBOO II  1b [TTT=ASTY]", "karim, tyBOO II 7 [TTT=ASTY]", 
"Putative heat 7 [TTT=ASTY]"), class = "factor")), class = "data.frame", row.names = c(NA, 
-20L))

Это данные, которые у меня есть, и я хочу удалить те строки, которые содержат следующие буквы:

Карим

ECO

Даа

Мне это понравилось

lookm <- c("karim", "ECO", "Daa") 
df2<- df[!df$Main %in% lookm, ]

Но ничего не случилось Как я могу это сделать?

r
4
Nikolas Service 21 Авг 2018 в 04:55

3 ответа

Лучший ответ

Мы могли бы использовать grep

df[!grepl(paste(lookm, collapse="|"), df$Main),]
3
akrun 21 Авг 2018 в 01:57

Мы могли бы использовать функцию str_detect() из пакета stringr :

library(stringr)
df[!str_detect(df$Main, "karim|ECO|Daa"),]

Выход:

                   How No                                                        Main
1  IsmainbodyCandidate 12 FSSZ1_ASTRONOMY Karim, tyBOO II brothers 74 TTT=ASTY BOO=3 
2  IsmainbodyCandidate 38                             Hammer H2A tyBOO 2-C [TTT=ASTY]
3  IsmainbodyCandidate 38           H2A3_ASTRONOMY Hammer H2A tyBOO 3 TTT=ASTY BOO=1 
4           Ismainbody  3                                Iso 2019 of denis [TTT=ASTY]
5  IsmainbodyCandidate 49                                  Putative heat 7 [TTT=ASTY]
6  IsmainbodyCandidate 38                                           Hammer [TTT=ASTY]
9  IsmainbodyCandidate 38                          H2AV_ASTRONOMY Iso 2 of  TTT=ASTY 
10 IsmainbodyCandidate 57                        E7EUT5_ASTRONOMY gas TTT=ASTY BOO=3 
11 IsmainbodyCandidate 38                  H2A1A_ASTRONOMY  tyBOO 1-A TTT=ASTY BOO=1 
14 IsmainbodyCandidate 10                        Iso 2 of Deleted in house [TTT=ASTY]
17 IsmainbodyCandidate 38                   H2A2B_ASTRONOMY tyBOO 2-B TTT=ASTY BOO=1 
20 IsmainbodyCandidate 61                               H2E_ASTRONOMY ufidm TTT=ASTY

Если вы также хотите отождествить слово «Карим» с заглавной буквой «К», вы можете попробовать:

df[!str_detect(df$Main, "(K|k)arim|ECO|Daa"),]

Выход:

                   How No                                              Main
2  IsmainbodyCandidate 38                   Hammer H2A tyBOO 2-C [TTT=ASTY]
3  IsmainbodyCandidate 38 H2A3_ASTRONOMY Hammer H2A tyBOO 3 TTT=ASTY BOO=1 
4           Ismainbody  3                      Iso 2019 of denis [TTT=ASTY]
5  IsmainbodyCandidate 49                        Putative heat 7 [TTT=ASTY]
6  IsmainbodyCandidate 38                                 Hammer [TTT=ASTY]
9  IsmainbodyCandidate 38                H2AV_ASTRONOMY Iso 2 of  TTT=ASTY 
10 IsmainbodyCandidate 57              E7EUT5_ASTRONOMY gas TTT=ASTY BOO=3 
11 IsmainbodyCandidate 38        H2A1A_ASTRONOMY  tyBOO 1-A TTT=ASTY BOO=1 
14 IsmainbodyCandidate 10              Iso 2 of Deleted in house [TTT=ASTY]
17 IsmainbodyCandidate 38         H2A2B_ASTRONOMY tyBOO 2-B TTT=ASTY BOO=1 
20 IsmainbodyCandidate 61                     H2E_ASTRONOMY ufidm TTT=ASTY
2
allanvc 21 Авг 2018 в 03:55

Мы можем придумать подход, объединяющий функции dplyr's slice() и stringr's str_which ():

library(dplyr)
library(stringr)

df %>%
  slice(-str_which(df$Main, "karim|ECO|Daa"))

#OR
#df %>%
#  slice(-str_which(df$Main, "(K|k)karim|ECO|Daa"))

Обратите внимание на вывод ниже, что мы потеряли прежние индексы строк нашего исходного data.frame:

                   How No                                                        Main
1  IsmainbodyCandidate 12 FSSZ1_ASTRONOMY Karim, tyBOO II brothers 74 TTT=ASTY BOO=3 
2  IsmainbodyCandidate 38                             Hammer H2A tyBOO 2-C [TTT=ASTY]
3  IsmainbodyCandidate 38           H2A3_ASTRONOMY Hammer H2A tyBOO 3 TTT=ASTY BOO=1 
4           Ismainbody  3                                Iso 2019 of denis [TTT=ASTY]
5  IsmainbodyCandidate 49                                  Putative heat 7 [TTT=ASTY]
6  IsmainbodyCandidate 38                                           Hammer [TTT=ASTY]
7  IsmainbodyCandidate 38                          H2AV_ASTRONOMY Iso 2 of  TTT=ASTY 
8  IsmainbodyCandidate 57                        E7EUT5_ASTRONOMY gas TTT=ASTY BOO=3 
9  IsmainbodyCandidate 38                  H2A1A_ASTRONOMY  tyBOO 1-A TTT=ASTY BOO=1 
10 IsmainbodyCandidate 10                        Iso 2 of Deleted in house [TTT=ASTY]
11 IsmainbodyCandidate 38                   H2A2B_ASTRONOMY tyBOO 2-B TTT=ASTY BOO=1 
12 IsmainbodyCandidate 61                               H2E_ASTRONOMY ufidm TTT=ASTY
1
allanvc 21 Авг 2018 в 03:41
51940591