I have some data which looks like:
cardCharacteristics
1 2 habs.|2 baños|72 m²|Bajos|Ascensor
2 3 habs.|2 baños|110 m²|Ascensor|Calefacción
3 3 habs.|70 m²|2ª Planta
4 2 habs.|2 baños|160 m²|Terraza|Balcón
5 5 habs.|2 baños|176 m²|7ª Planta|Ascensor
6 3 habs.|2 baños|187 m²|4ª Planta
I am trying to split the column into an unspecified number of columns by |. Using the following cSplit_e(., split.col = "cardCharacteristics", sep = "|", type = "character") doesn't get me the result since it splits on all unique values and returns a binary output.
The expected output would be:
tibble(
"habs" = c(2, 3, 3, 2, 5, 3),
"baños" = c(2, 2, NA, 2, 2, 2),
"m^2" = c(72, 110, 70, 160, 176, 187),
"Floor" = c("Bajos", NA, "2ª Planta", NA, "7ª Planta", "4ª Planta"),
"Lift" = c("Ascensor", "Ascensor", NA, NA, "Ascensor", NA),
"Heating" = c(NA, "Calefacción", NA, NA, NA, NA),
"Terraza" = c(NA, NA, NA, "Terraza", NA, NA),
"Balcón" = c(NA, NA, NA, "Balcón", NA, NA)
)
or:
habs baños `m^2` Floor Lift Heating Terraza Balcón
<dbl> <dbl> <dbl> <chr> <chr> <chr> <chr> <chr>
1 2 2 72 Bajos Ascensor NA NA NA
2 3 2 110 NA Ascensor Calefacción NA NA
3 3 NA 70 2ª Planta NA NA NA NA
4 2 2 160 NA NA NA Terraza Balcón
5 5 2 176 7ª Planta Ascensor NA NA NA
6 3 2 187 4ª Planta NA NA NA NA
Data:
data = structure(list(cardCharacteristics = c("2 habs.|2 baños|72 m²|Bajos|Ascensor",
"3 habs.|2 baños|110 m²|Ascensor|Calefacción", "3 habs.|70 m²|2ª Planta",
"2 habs.|2 baños|160 m²|Terraza|Balcón", "5 habs.|2 baños|176 m²|7ª Planta|Ascensor",
"3 habs.|2 baños|187 m²|4ª Planta")), row.names = c(NA, 6L
), class = "data.frame")
EDIT:
My progress, is to do the following:
data %>%
mutate(
habs = str_extract(cardCharacteristics, "(\\d)+(?= habs.)"),
baños = str_extract(cardCharacteristics, "(\\d)+(?= baños)"),
mts2 = str_extract(cardCharacteristics, "(\\d)+(?= m²)"),
floor = str_extract(cardCharacteristics, "(\\d)+(?= 4ª Planta)")
)
EDIT 2:
The following:
mutate(
habs = str_extract(cardCharacteristics, "(\\d)+(?= habs.)"),
baños = str_extract(cardCharacteristics, "(\\d)+(?= baños)"),
mts2 = str_extract(cardCharacteristics, "(\\d)+(?= m²)"),
Terraza = str_extract(cardCharacteristics, "Terraza"),
Calefacción = str_extract(cardCharacteristics, "Calefacción"),
Floor = str_extract(cardCharacteristics, "(\\d)+(?=ª Planta)|Bajos"),
)
Gets me:
cardCharacteristics habs baños mts2 Terraza Calefacción Floor
1 2 habs.|2 baños|72 m²|Bajos|Ascensor 2 2 72 <NA> <NA> Bajos
2 3 habs.|2 baños|110 m²|Ascensor|Calefacción 3 2 110 <NA> Calefacción <NA>
3 3 habs.|70 m²|2ª Planta 3 <NA> 70 <NA> <NA> 2
4 2 habs.|2 baños|160 m²|Terraza|Balcón 2 2 160 Terraza <NA> <NA>
5 5 habs.|2 baños|176 m²|7ª Planta|Ascensor 5 2 176 <NA> <NA> 7
6 3 habs.|2 baños|187 m²|4ª Planta 3 2 187 <NA> <NA> 4
Which is almost what I need.