如何指定"不包含"在R

时间:2015-12-23 21:51:35

标签: r filter dplyr

我是R的新手。

使用名为SE_CSVLinelist_clean的表,我想提取名为where_case_travelled_1的变量不包含字符串"Outside Canada""Outside province/territory of residence but within Canada"的行。然后创建一个名为SE_CSVLinelist_filtered的新表。

SE_CSVLinelist_filtered <- filter(SE_CSVLinelist_clean, 
where_case_travelled_1 %in% -c('Outside Canada','Outside province/territory of residence but within Canada'))

上面的代码在我使用&#34; c&#34;而不是&#34; -c&#34;。
那么,当我真的想要排除包含国家或省外的行时,如何指定上述内容?

非常感谢

3 个答案:

答案 0 :(得分:61)

请注意,%in%会返回TRUEFALSE的逻辑向量。要否定它,您可以在逻辑语句前面使用!

SE_CSVLinelist_filtered <- filter(SE_CSVLinelist_clean, 
 !where_case_travelled_1 %in% 
   c('Outside Canada','Outside province/territory of residence but within Canada'))

关于使用-c(...)的原始方法,-是一个一元运算符,&#34;对数字或复数向量(或可以强制它们的对象)执行算术运算&#34; (来自help("-"))。由于您正在处理无法强制转换为数字或复数的字符向量,因此无法使用-

答案 1 :(得分:1)

尝试将搜索条件放在方括号中,如下所示。这将在括号内返回条件查询的结果。然后将其结果设置为FALSE,以测试其结果是否为负(即不属于向量中的任何选项)。

SE_CSVLinelist_filtered <- filter(SE_CSVLinelist_clean, 
(where_case_travelled_1 %in% c('Outside Canada','Outside province/territory of residence but within Canada')) == FALSE)

答案 2 :(得分:0)

请注意之前的解决方案,因为它们需要准确输入您要检测的字符串。

例如,问问自己“外面”这个词是否足够。如果是这样,那么:

data_filtered <- data %>% 
  filter(!str_detect(where_case_travelled_1, "Outside")

reprex 版本:

iris

iris %>% 
  filter(!str_detect(Species, "versicolor"))