删除包含特定字符串的组

时间:2018-02-21 21:59:46

标签: r dplyr

我有一个关于删除行中包含某些字符串的组的问题,例如,如果包含.。我想在不破坏管道的情况下实现这一目标。我的意思是不使用任何join函数。

示例数据

vals <- c("good","bad",'ugly',"good","bad.","ugly")

    gr <- gl(2,3)

vals gr
1 good  1
2  bad  1
3 ugly  1
4 good  2
5 bad.  2
6 ugly  2

df <- data.frame(vals,gr)

我试过

library(dplyr)
        df%>%
          filter(!grepl("\\.",vals))

仅删除与条件匹配的行。但我想删除整个gr 2

 vals gr
1 good  1
2  bad  1
3 ugly  1
4 good  2
5 ugly  2

4 个答案:

答案 0 :(得分:8)

也许是这样的:

realloc()

答案 1 :(得分:2)

另一种选择可能是使用%in%运算符。

df %>% 
 filter(!(gr %in% unique(ifelse(grepl("\\.",vals),gr,NA) )))

#  vals gr
#1 good  1
#2  bad  1
#3 ugly  1

答案 2 :(得分:2)

当其中一个组成员在vals - 中包含某个字符串而没有破坏管道时,OP已请求删除整个组。

OP明确表示:我的意思是不使用任何join函数。

但是,我认为使用反连接不会破坏管道:

library(dplyr)
data.frame(vals, gr) %>% 
  anti_join(., filter(., grepl("\\.",vals)), by = "gr")
  vals gr
1 good  1
2  bad  1
3 ugly  1

答案 3 :(得分:1)

以下是base Rsubsettable

的一个选项
subset(df, gr %in% names(which(!table(gr, grepl("\\.", vals))[,2])))
#  vals gr
#1 good  1
#2  bad  1
#3 ugly  1