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检测fromstringr
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],]