r - 从 R 数据框列中选择值
问题描述
我正在使用芝加哥犯罪数据集和 R 进行课程项目。数据集中的属性之一是Block
包含事件发生的部分地址。例如:
+--------------------------+
| Block |
+--------------------------+
| 45xx N Locust Grove St |
| 65xx Hawthorne Ave |
+--------------------------+
值的Block
长度各不相同,但我想创建一个具有街道类型、St、Ave、Blvd 等的新变量。我尝试使用来自 tidyr 的单独函数。
df <- df %>%
separate(Block, into = c("partial.address, "type"),
sep = " ", extra = "merge", fill = "left")
但是,这将返回数字 45xx 作为partial.address
值,而剩余的值在type
. 如何从地址中选择街道类型?
我希望得到这样的输出:
+--------------------------+-------------+
| partial.address | type |
+--------------------------+-------------+
| 45xx N Locust Grove | St |
| 65xx Hawthorne | Ave |
+--------------------------+-------------+
解决方案
您可以使用extract
:
tidyr::extract(df, Block, c("partial.address", "type"), "(.*)(St|Ave)")
# partial.address type
#1 45xx N Locust Grove St
#2 65xx Hawthorne Ave
或使用stringr
:
library(dplyr)
library(stringr)
df %>%
mutate(type = str_extract(Block, '(St|Ave)'),
partial.address = str_remove(Block, type))
如果您有更多模式,您可以包含更多模式(St|Ave)
。
如果我们想捕获每个单词的最后一个单词,Block
我们可以使用:
df %>%
mutate(type = str_extract(Block, '\\w+$'),
partial.address = str_remove(Block, type))
数据
df <- structure(list(Block = c("45xx N Locust Grove St", "65xx Hawthorne Ave"
)), class = "data.frame", row.names = c(NA, -2L))
推荐阅读
- python - 有什么方法可以在 Django 中为我的 sqlite3 数据库设置密码?
- asp.net-core - 如何从 asp.net core 3 Identity 中删除 UserName 字段
- html - 如何从网站获取 HTML 代码并将其转换为 VB 字符串?
- javascript - 可以在没有 ajaxSetup 的情况下预定义 ajax 参数吗?
- json - 在 Woocommerce Rest API 上遇到 JSON 问题
- mysql - MySQL中的特定时间触发器
- sql - 无法为数据库“tempdb”中的对象“dbo.SORT 临时运行存储:142590947360768”分配空间,因为“PRIMARY”
- php - echo Recursiveiteratoriterator 输出作为数组中的键
- vim - macVim Dracula 配色方案与 Sublime Dracula 主题不相似
- c - 从组件构建 OpenSSL RSA