r - 匹配字符前的数字或第一个字母 - 正则表达式
问题描述
我正在尝试在 R 中匹配特定模式以分隔成列
考虑以下字符串示例:
1-EXAMPLE
23-EXAMPLE2
A-EXAMPLE3
EXAMPLE-4
如何编写要使用的正则表达式,tidyr::extract
以便分离发生如下:
1 EXAMPLE
23 EXAMPLE2
A EXAMPLE3
NA EXAMPLE-4
-
如果在第一个标记之前只有数字,或者如果事先有一个字母(如第三种情况),我想在第一个标记处进行分隔,但如果有更多(如示例 4)
谢谢!
解决方案
我们可以case_when
先插入一个字符extract
library(dplyr)
library(stringr)
library(tidyr)
df1 %>%
mutate(col1 = case_when(str_detect(trimws(col1), '^([A-Z]|[0-9]+)\\s*-',
negate = TRUE) ~ str_c('-', col1), TRUE ~ trimws(col1))) %>%
extract(col1, into = c('col1', 'col2'), '^([A-Z]|\\d+)?\\s*-(.*)') %>%
mutate(col1 = na_if(col1, ''))
-输出
col1 col2
1 1 EXAMPLE
2 23 EXAMPLE2
3 A EXAMPLE3
4 <NA> EXAMPLE-4
数据
df1 <- structure(list(col1 = c("1-EXAMPLE", "23-EXAMPLE2", "A-EXAMPLE3",
"EXAMPLE-4")), class = "data.frame", row.names = c(NA, -4L))
推荐阅读
- code-coverage - Gcov 没有为少数类生成.gcda 文件
- user-interface - 尝试为 google 脚本 UI 警报设置超时
- sql - Do i need to add the constraint line I used in a strong entity when I'm making a create statement for a weak entity?
- c - 这个矢量化代码如何不覆盖内存?
- python - 我如何在 Python 中获得管理员权限的 UAC 提示
- emacs - 如何切换到从捕获模板创建的缓冲区?
- android - INSTALL_FAILED_UPDATE_INCOMPATIBLE:包 com.alightcreative.motion 签名与之前安装的版本不匹配;忽略
- typescript - 打字稿不能正确推断类型
- ios - 颤振项目未在IOS中运行
- python - 如何在python中用同一天和同一时间的平均值估算时间序列数据中的缺失值