r - 如何在不同的行中使用不同的条件进行过滤?
问题描述
数据结构:
library(tidyverse)
df <- tribble(
~"group", ~"word",
1,"apple",
1,"orange",
1,"apple cider",
1,"orange juice",
1,"pear",
1,"pear",
2,"apple",
2,"pear",
3,"orange juice",
3,"apple",
4,"pear",
4,"guava"
)
我想用 str_detect 过滤“word”列上的“apple”和“orange”。如果“组”同时包含单词“apple”和“orange”,则仅返回观察结果。
期望的输出:
# A tibble: 6 x 2
group word
<dbl> <chr>
1 1 apple
2 1 orange
3 1 apple cider
4 1 orange juice
5 3 orange juice
6 3 apple
非常感谢!
解决方案
带有str_extract
和的选项n_distinct
。
library(dplyr)
library(stringr)
df %>%
group_by(group) %>%
filter((n_distinct(unlist(str_extract_all(word, "apple|orange"))) >1) &
str_detect(word, 'apple|orange'))
# A tibble: 6 x 2
# Groups: group [2]
# group word
# <dbl> <chr>
#1 1 apple
#2 1 orange
#3 1 apple cider
#4 1 orange juice
#5 3 orange juice
#6 3 apple
解释
按'group'分组后,我们提取所有'apple'或'orange'的'word' str_extract_all
(默认输出为a list
),unlist
the list
,并计算不同元素的数量(n_distinct
),检查是否大于 1 作为一个条件,该条件与另一个检查“word”列是否包含“apple”或“orange”(str_detect
)的条件相结合。基本上,它只会让那些同时拥有这两种情况的组并删除过程中的任何其他元素,即如果我们只使用第一个表达式
df %>%
group_by(group) %>%
filter((n_distinct(unlist(str_extract_all(word, "apple|orange"))) >1))
# A tibble: 8 x 2
# Groups: group [2]
# group word
# <dbl> <chr>
#1 1 apple
#2 1 orange
#3 1 apple cider
#4 1 orange juice
#5 1 pear # // not needed, but it was kept
#6 1 pear # // because it is checking on distinct element
#7 3 orange juice
#8 3 apple
仅用第二个表达式
df %>%
group_by(group) %>% filter(str_detect(word, 'apple|orange'))
# A tibble: 7 x 2
# Groups: group [3]
# group word
# <dbl> <chr>
#1 1 apple
#2 1 orange
#3 1 apple cider
#4 1 orange juice
#5 2 apple # // also keeps group 2 that includes only apple
#6 3 orange juice
#7 3 apple
通过执行&
,将删除组 2 以及 'word' 列中的 'pear' 等元素
推荐阅读
- javascript - 如何使用 js 切换检查工具?
- javascript - 有没有办法检测是否调用了 macOS 屏幕捕获器或截取了屏幕截图?
- visual-studio - 如何使用 Visual Studio 调试器命令打开文件
- python - 如何在pytorch中批量矩阵向量乘法(一个矩阵,多个向量)而不在内存中复制矩阵
- jquery - 使用 jQUERY 将重写的 URL 更改回 URL 变量
- android - 将 Android 应用程序连接到本地 Laravel 数据库
- c - 在 C 中从 (windows.h) 实现 API 函数后控制台屏幕隐藏
- ios - 从 ReactNative Project 更改 Xcode BundleID 和项目名称
- typescript - 从 Typescript 中的自动生成类型中删除 []
- python - 如何将多维列表合并到一个元组列表中?