我有一个关于删除行中包含某些字符串的组的问题,例如,如果包含.
。我想在不破坏管道的情况下实现这一目标。我的意思是不使用任何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
答案 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 R
中subset
和table
subset(df, gr %in% names(which(!table(gr, grepl("\\.", vals))[,2])))
# vals gr
#1 good 1
#2 bad 1
#3 ugly 1