我有一个数据帧
df <- data.frame(
A = c(4, 2, 7),
B = c(3, 3, 5),
C = c("Expert,Foo", "Bar,Wild", "Zap")
)
并且,我想的第二个作为索引使用,以除去其中包含的特定值的行
mylist <- data.frame(rtext = c("Foo","Bar"))
所以我尝试这样做:
subset(df, C %in% mylist$rtext)
我如何删除特定行?
由于这是一个部分匹配,我们可以使用grep
。我们paste
“myList中”列“rtext”的成单个字符串与分隔符|
这意味着OR
的元素,然后得到与grepl
逻辑索引上“DF”的“C”列中,否定(!
)来改变TRUE为FALSE和FALSE为TRUE时subset
是不是在“MYLIST”的“rtext”的行
subset(df, !grepl(paste(mylist$rtext, collapse="|"), C))
# A B C
#3 7 5 Zap
从str_detect
使用stringr
df[!stringr::str_detect(df$C,paste(mylist$rtext,collapse = '|')),]
A B C
3 7 5 Zap
如果你需要100%匹配,这意味着Foooo
不会被删除,请与dplyr
和tidyr
重新格式化您的DF月1日,因为str_detect
和grepl
是部分匹配,如果你有话喜欢Expert,Foott
它仍然会显示为匹配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],]