【问题标题】:Seperate a character in multiple sentences in R在R中的多个句子中分隔一个字符
【发布时间】:2018-11-04 13:59:46
【问题描述】:

我提取了一个字符如下:

"Grondtrekken van het Nederlandse strafrecht                                                                 vanaf € 16.95                                                                                                                                                                        Praktisch bestuursrecht                                                                 vanaf € 22.45                                                                                                                                                                        Basisboek bedrijfseconomie                                                                 vanaf € 24.95                                                                                                                                                                        Basisboek Bedrijfseconomie                                                                 vanaf € 70.90                                                             ... <truncated>

我想提取句子和价格,以便获得如下形式的 data.frame: 名称 =“Grondtrekken van het Nederlandse strafrecht”价格 = 16.95

名称 = "Praktisch bestuursrecht" 价格 = 22.45

等等……

我在分离句子时遇到问题。我尝试使用 gsub,但无法获得所需的结果。

【问题讨论】:

  • 您的价格数据的来源是什么?您提供的示例数据似乎没有这个。
  • 如果向右滚动,您将看到价格(以欧元计),问题是它们之间有很大的空间
  • 那么请格式化您的数据以便我们阅读。我们不应该为您这样做。
  • 所以一句话后面有很大的空格,后面跟着“vanaf €XX,XX”

标签: r text extract


【解决方案1】:

这是一个使用stringr包处理字符串的解决方案

  1. 在价格后拆分字符串以创建数据向量
  2. 提取价格之前的内容(vanaf 之前)
  3. 使用带有\\d 的正则表达式提取价格
string  <- "Grondtrekken van het Nederlandse strafrecht                                                                 vanaf € 16.95                                                                                                                                                                        Praktisch bestuursrecht                                                                 vanaf € 22.45                                                                                                                                                                        Basisboek bedrijfseconomie                                                                 vanaf € 24.95                                                                                                                                                                        Basisboek Bedrijfseconomie                                                                 vanaf € 70.90"

library(stringr)
# for pipe 
library(magrittr)
# split after price
vec <- str_split(string, "(?<=\\d)\\s")[[1]] %>%
  # delete repeated spaces
  str_squish()

vec
#> [1] "Grondtrekken van het Nederlandse strafrecht vanaf \200 16.95"
#> [2] "Praktisch bestuursrecht vanaf \200 22.45"                    
#> [3] "Basisboek bedrijfseconomie vanaf \200 24.95"                 
#> [4] "Basisboek Bedrijfseconomie vanaf \200 70.90"

data.frame(
  # extract what is before vanaf
  Name = str_extract(vec, ".*(?=vanaf)") %>% str_trim(),
  # extract price
  Price = str_extract(vec, "\\d+(\\.\\d+)?") %>% as.numeric()
)
#>                                          Name Price
#> 1 Grondtrekken van het Nederlandse strafrecht 16.95
#> 2                     Praktisch bestuursrecht 22.45
#> 3                  Basisboek bedrijfseconomie 24.95
#> 4                  Basisboek Bedrijfseconomie 70.90

reprex package (v0.2.1) 于 2018 年 11 月 4 日创建

【讨论】:

  • 这几乎可以解决问题,但现在看来每一行的价格都是一样的。
猜你喜欢
  • 1970-01-01
  • 2014-10-14
  • 1970-01-01
  • 2018-09-04
  • 1970-01-01
  • 2021-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多