r - 使用多个文字定界符在 R 中的数据框中拆分字符串

标签 r tidyr stringr

我有一个这样的地址单列数据框:

ADDRESS
123 Main Street Unit A
456 Main Street Apt 3
789 Main Street Floor 2

我想解析地址以将 Unit/Apt/Floor 信息与街道地址的其余部分分开。有没有一种简单的方法可以做到这一点,一开始就知道分隔符应该是“Unit”、“Apt”和“Floor”?

所需的最终结果将是一个两列的数据框,如下所示:

ADDRESS           UNIT
123 Main Street   Unit A
456 Main Street   Apt 3
789 Main Street   Floor 2

我曾尝试使用 tidyr 包中的 separate,但它只接受(据我所知)单个定界符参数。因此,可以通过多次调用 separate 来完成此任务,但这看起来很愚蠢。

df <- df %>% tidyr::separate(ADDRESS, into = c("ADDRESS","UNIT"), sep = ' Apt')
# This would need to repeated using ' Unit' and ' Floor'.

同样,似乎 stringr::str_split_fixed() 应该能够处理这个任务,但我还是不知道如何通过一次调用完成这个过程(即指定三个分隔符)。

stringr::str_split_fixed(df$Address, c(' Unit', ' Apt', ' Floor'), 2)
# Does not work! Additionally does not result in additional column in dataframe as desired.

这是创建示例数据框的代码:

library(dplyr)    # for piping
library(tidyr)
library(stringr)

df <- data.frame(ADDRESS = c("123 Main Street Unit A", "456 Main Street Apt 3", "789 Main Street Floor 2"))

最佳答案

这行吗:

使用基础 R:

gsub('(\\d+\\sMain Street\\s)(.*)','\\2',df$ADDRESS)
[1] "Unit A"  "Apt 3"   "Floor 2"

使用 dplyr 和 stringr:

library(dplyr)
library(stringr)
df %>% mutate(UNIT = str_extract(ADDRESS, '(?<=Main Street ).*'))
                  ADDRESS    UNIT
1  123 Main Street Unit A  Unit A
2   456 Main Street Apt 3   Apt 3
3 789 Main Street Floor 2 Floor 2

关于r - 使用多个文字定界符在 R 中的数据框中拆分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69560053/

相关文章:

r - 按条件将符号粘贴到字符序列中

r - 为什么 string::str_split 在 dplyr::mutate 时不更新数据帧

regex - R regex gsub分隔字母和数字

r - 尝试从简单线性回归进行预测时出错

R:从具有重复制表符的制表符分隔文件中读取数据

r - 使用 fill 有条件地填充 NA 值,无需循环

r - 无法取消嵌套具有不同列类型的列表数据框

r - 如果单元格的第一个值是四位数,则将信息移动到新列

r - 使用 ggplot2 绘制分位数

r - 不连续图 - R 中的 ggplot