r - tidyr 将具有字符和数值的列拆分为 R 中的两个单独的列
问题描述
我有一个数据集,其中有一offense
列包含offense
描述及其相关的攻击code
。犯罪代码有时完全在,有时是和numeric
的组合。numeric
character
如何将此列拆分为两个不同的列,一列用于 the offense code
,另一列offense description
用于tidyr
in R
?
示例数据列:
Crime
123 Crime Description A
345 Crime Description B
678 Crime Description C
91011 Crime Description D
678(a)(1) Crime Description E
345(a)(32)(i) Crime Description F
143(a)(16) Crime Description G
678.08(a) Crime Description H
976.D1 Crime Description I
解决方案
你可以sub
在这里使用:
Crime$offense_code <- sub("^(\\d+(?:\\.\\w+)?(?:\\(.*?\\))*) .*$", "\\1", Crime$data)
Crime$offense_desc <- sub("^\\d+(?:\\.\\w+)?(?:\\(.*?\\))* (.*)$", "\\1", Crime$data)
Crime
data offense_code offense_desc
1 123 Crime Description A 123 Crime Description A
2 345 Crime Description B 345 Crime Description B
3 678 Crime Description C 678 Crime Description C
4 91011 Crime Description D 91011 Crime Description D
5 678(a)(1) Crime Description E 678(a)(1) Crime Description E
6 345(a)(32)(i) Crime Description F 345(a)(32)(i) Crime Description F
7 143(a)(16) Crime Description G 143(a)(16) Crime Description G
8 678.08(a) Crime Description H 678.08(a) Crime Description H
9 976.D1 Crime Description I 976.D1 Crime Description I
此处使用的通用正则表达式表示匹配:
^ from the start of the data field
\\d+ an integer
(?:\\.\\w+)? followed by optional dot and word component
(?:\\(.*?\\))* followed by zero or more (...) terms
[ ] a single space
.* then match the entire description
$ until the end of the data field
推荐阅读
- python - 在 manim 中,如何将轴标签的文本设置为与轴单位不同?
- php - 目标类 [Database\Seeders\UsersTableSeeder] 不存在
- django - 模型字段类型从 CharField 更改为 ForeignKey 时 Django 模板损坏
- python - 使用 `requests` 和 `MultipartEncoder` 发布是否可能导致传输错误或部分上传?
- reactjs - React - 我必须点击一个按钮三次才能生效
- nativescript - 如何在不“重写”的情况下扩展 NativeScript 插件?
- .net - PlayWright-Sharp 的好的 PageObject 示例似乎不存在
- mosquitto - 在 mosquitto 中限制客户端的消息
- google-apps-script - Google Sheets Script - 根据单元格中的文本定义常量
- arrays - VBA 集合:仅添加选定数量的值