我正在尝试将我的正则表达式模式用于我希望使用separator()
包中的tidyr
函数拆分的列。但是我无法弄清楚为什么我的模式不起作用。
这是我的输入数据帧:
列gemeente
表示英语中的“市政”,partijen
表示“政党”。
gemeente partijen
1 Asten CDA 1 , Algemeen Belang 1 en Leefbaar Asten 1
2 Beek BBB-NDB 2, CDA 2
3 Coevorden PvdA 1, CDA 1 en Lokaal 1
4 Ermelo Progressief Ermelo 1, BurgerBelangen Ermelo 1, SGP 1 en VVD 1
5 Heeze-Leende Lokaal Heeze-Leende 1, CDA 1, D66 1 en PvdA 1
6 Hulst Algemeen Belang Groot Hulst 1,5, CDA 1, PvdA 0,7 en VVD 0,8
7 Roerdalen RoerstreekLokaal! 1, CDA 1 en Democraten Roerdalen 1
8 Uden Jong Uden 1, CDA 1 , Gewoon Uden 1 en VVD-Leefbaar Uden 1
一个号码之前或之间的所有内容都是荷兰的当地政党。我希望让每个派对都在自己的专栏中,然后转置整理我的数据框。 en
这个词在荷兰语中的意思是'和',所以我们也可以删除那个。
这是同一数据框的dput()
输出:
df <- structure(list(gemeente = c("Asten", "Beek", "Coevorden", "Ermelo",
"Heeze-Leende", "Hulst", "Roerdalen", "Uden"), partijen = c("CDA 1 , Algemeen Belang 1 en Leefbaar Asten 1",
"BBB-NDB 2, CDA 2", "PvdA 1, CDA 1 en Lokaal 1", "Progressief Ermelo 1, BurgerBelangen Ermelo 1, SGP 1 en VVD 1",
"Lokaal Heeze-Leende 1, CDA 1, D66 1 en PvdA 1", "Algemeen Belang Groot Hulst 1,5, CDA 1, PvdA 0,7 en VVD 0,8",
"RoerstreekLokaal! 1, CDA 1 en Democraten Roerdalen 1", "Jong Uden 1, CDA 1 , Gewoon Uden 1 en VVD-Leefbaar Uden 1 "
)), row.names = c(NA, -8L), class = c("tbl_df", "tbl", "data.frame"
), .Names = c("gemeente", "partijen"))
...低于我的代码,但几乎没有完全正常工作。
首先,我删除了数字(我不使用空格或逗号,因为有一个名为D66
的聚会),然后我separate
进入多个列,其中包含两个分隔符sep = ", |,| , | en "
library(tidyverse)
df %>%
mutate(partijen = gsub(" [0-9]|\\,[0-9]", "", partijen)) %>%
separate(partijen,
into = c("partij_1", "partij_2", "partij_3", "partij_4"),
sep = ", |,| , | en ")
我的输出运行如下:
# A tibble: 8 x 5
gemeente partij_1 partij_2 partij_3 partij_4
<chr> <chr> <chr> <chr> <chr>
1 Asten CDA Algemeen Belang en Leefbaar Asten NA NA
2 Beek BBB-NDB CDA NA NA
3 Coevorden PvdA CDA Lokaal NA
4 Ermelo Progressief Ermelo BurgerBelangen Ermelo SGP en VVD NA
5 Heeze-Leende Lokaal Heeze-Leende CDA D66 PvdA
6 Hulst Algemeen Belang Groot Hulst CDA PvdA VVD
7 Roerdalen RoerstreekLokaal! CDA en Democraten Roerdalen NA NA
8 Uden Jong Uden CDA Gewoon Uden en VVD-Leefbaar Uden NA
Warning message:
Expected 4 pieces. Missing pieces filled with `NA` in 6 rows [1, 2, 3, 4, 7, 8].
你看到我的问题了吗?
我不明白为什么sep = ", |,| , | en "
不适用于双方之间的en
:
"Algemeen Belang en Leefbaar Asten"
"SGP en VVD"
CDA en Democraten Roerdalen"
答案 0 :(得分:1)
当我在"[[:space:]]en[[:space:]]"
函数的" en "
参数中使用此模式sep =
而不是separator
时,它会正确分割。
所以适用的代码(对我而言)如下:
library(tidyverse)
df %>%
mutate(partijen = gsub(" [0-9]|\\,[0-9]", "", partijen)) %>%
separate(partijen,
into = c("partij_1", "partij_2", "partij_3", "partij_4"),
sep = ", |,| , |[[:space:]]en[[:space:]]")