r - 根据正则表达式模式和 ID 过滤行
问题描述
我有一个df
这样的:
df <- data.frame(
id = c("A", "A", "B", NA, "A", "B", "B", "B"),
speech = c("hi", "how are you [Larry]?", "[uh]", "(0.123)", "I'm fine [you 'n Mary] how's it [goin]?", "[erm]", "(0.4)", "well")
)
我想过滤掉那些完全由从字符串开始到字符串结束speech
的方括号括起来的表达式组成的行 (1) 和 (2) 那些与构成整个的行相同的行。我知道如何过滤掉行:[...]
ID
[...]
speech
[...]
df %>%
group_by(grp = rleid(id)) %>%
filter(grepl("^\\[.*?\\]$", speech))
但我不知道如何过滤掉该ID
行之后的相同[...]
行。所需的输出是这样的:
df
id speech
1 B [uh]
2 B [erm]
3 B (0.4)
4 B well
解决方案
rleid
使用OP 的代码创建分组索引,然后删除在“语音”元素中filter
没有 a[
的组,first
ungroup
library(dplyr)
library(data.table)
library(stringr)
df %>%
group_by(grp = rleid(id)) %>%
filter(str_detect(first(speech), "^\\[")) %>%
ungroup %>%
select(-grp)
-输出
# A tibble: 4 x 2
# id speech
# <chr> <chr>
#1 B [uh]
#2 B [erm]
#3 B (0.4)
#4 B well
编辑:基于@ChrisRuehlemann 的评论
推荐阅读
- typescript - 打字稿记录
[key] 应该返回 `Value | 未定义`,不是吗? - sql-server - SQL Server 中的每周百分比细分
- python-3.x - python 3中if语句的奇怪语法错误?
- neural-network - 神经网络输出(y_predict)粘在一起,可能是什么原因?
- go - 如何在没有互联网访问的情况下使用 gopls
- java - 无法更新片段内的 RecyclerView
- wordpress - WooCommerce 网站购物车与第二个 WooCommerce 网站连接
- python - 从多天列创建周标签
- javascript - 通过@Input() 传递的数据
- r - 我需要安装哪个 R 包来修复错误:找不到函数 geom_sf