R 使用外部列表从行中删除数据

R 使用外部列表从行中删除数据,r,R,我有一个数据框 df <- data.frame( A = c(4, 2, 7), B = c(3, 3, 5), C = c("Expert,Foo", "Bar,Wild", "Zap") ) 如何删除特定行?由于它是部分匹配,我们可以使用grep。我们将'myList'列'rtext'的元素粘贴到一个带有分隔符|的字符串中,该分隔符表示或,然后在'df'的'C'列上使用grepl获取逻辑索引,取反(!)将TRUE更改为FALSE,将FALSE更改为TRU

我有一个数据框

df <- data.frame(
    A = c(4, 2, 7),
    B = c(3, 3, 5),
    C = c("Expert,Foo", "Bar,Wild", "Zap")
  )

如何删除特定行?

由于它是部分匹配,我们可以使用
grep
。我们
将'myList'列'rtext'的元素粘贴到一个带有分隔符
|
的字符串中,该分隔符表示
,然后在'df'的'C'列上使用
grepl
获取逻辑索引,取反(
)将TRUE更改为FALSE,将FALSE更改为TRUE以
子集
不在“mylist”的“rtext”中的行

subset(df, !grepl(paste(mylist$rtext, collapse="|"), C))
#   A B   C
#3 7 5 Zap

使用
stru检测
from
stringr

df[!stringr::str_detect(df$C,paste(mylist$rtext,collapse = '|')),]
  A B   C
3 7 5 Zap
如果您需要100%匹配,这意味着
fooo
不会被删除,请使用
dplyr
tidyr
首先重新格式化df,因为
str\u detect
grepl
是部分匹配,如果您有
Expert,foot
这样的单词,它仍将显示为与
Foo

library(tidyr)
library(dplyr)
df$id=seq.int(nrow(df))
df1=df %>%
        transform(C = strsplit(C, ",")) %>%
        unnest(C)

df[!df$id%in%df1$id[df1$C%in%mylist$rtext],]
df[!stringr::str_detect(df$C,paste(mylist$rtext,collapse = '|')),]
  A B   C
3 7 5 Zap
library(tidyr)
library(dplyr)
df$id=seq.int(nrow(df))
df1=df %>%
        transform(C = strsplit(C, ",")) %>%
        unnest(C)

df[!df$id%in%df1$id[df1$C%in%mylist$rtext],]