我有一些数据,看起来像:
# A tibble: 6 × 1
characteristicsAdditional
<chr>
1 Tipo de inmueble:Piso|Estado:Bien|Antigüedad:30 a 50 años|Parking:Privado|Ascensor:Sí|Consumo energía:|Emisiones:
2 Tipo de inmueble:Piso|Orientación:Sureste|Estado:Muy bien|Antigüedad:30 a 50 años|Consumo energía:|Emisiones:
3 Tipo de inmueble:Apartamento|Orientación:Este|Estado:Bien|Antigüedad:30 a 50 años|Parking:Comunitario|Ascensor:Sí|Amueblado:Sí|Consumo energía:|Emisi…
4 Tipo de inmueble:Casa o chalet|Orientación:Sur|Agua caliente:Gas Natural|Calefacción:Propano|Estado:Casi nuevo|Amueblado:Sí|Consumo energía:|Emisione…
5 Tipo de inmueble:Casa o chalet|Parking:Privado|Amueblado:Sí|Consumo energía:|Emisiones:
6 Tipo de inmueble:Casa adosada|Estado:Casi nuevo|Antigüedad:10 a 20 años|Parking:Privado|Consumo energía:|Emisiones:
它在一列characteristicsAdditional
中,我想以以下方式拆分它:
- 首先由
|
执行-因为:
Tipo de inmueble:Piso
=建筑类型:公寓Estado:Bien
=状态:良好Antigüedad:30 a 50 años
=年龄:30至50岁
等。特征首先由|
进行分组。因此,我试图使用|
将单个列拆分为多个列——这里我不知道将要构造的列的确切数量。
我尝试使用data %>% splitstackshape::cSplit_e(., split.col = "characteristicsAdditional", sep = "|", type = "character")
,但它没有得到我想要的,因为:
导致它创建了太多列。
使用上面的方法可以得到类似的东西:
characteristicsAdditional_Tipo de inmueble:Casa adosada characteristicsAdditional_Tipo de inmueble:Casa o chalet
1 NA NA
2 NA NA
3 NA NA
4 NA 1
5 NA 1
6 1 NA
characteristicsAdditional_Tipo de inmueble:Piso
1 1
2 1
3 NA
4 NA
5 NA
6 NA
预期输出:
tibble(
`Tipo de inmueble` = c("piso", "piso", "Apartmento", "Casa o chalet", "Casa o chalet", "Casa adosada"),
`Estado` = c("Bien", NA, NA, "Casi nuevo", NA, "Casi nuevo"),
"Antigüedad" = c("30 a 50 años", "30 a 50 años", "30 a 50 años", NA, NA, "10 a 20 años"),
`Parking` = c("Privado", NA, "Comunitario", NA, "Privado", "Privado"),
"Consumo energía" = c(NA, NA, NA, NA, NA, NA),
"Emisiones" = c(NA, NA, NA, NA, NA, NA),
"Orientación" = c(NA, "Sureste", "Este", "Sur", NA, NA),
"Agua" = c(NA, NA, NA, "Caliente", NA, NA)
)
# A tibble: 6 × 8
`Tipo de inmueble` Estado Antigüedad Parking `Consumo energía` Emisiones Orientación Agua
<chr> <chr> <chr> <chr> <lgl> <lgl> <chr> <chr>
1 piso Bien 30 a 50 años Privado NA NA NA NA
2 piso NA 30 a 50 años NA NA NA Sureste NA
3 Apartmento NA 30 a 50 años Comunitario NA NA Este NA
4 Casa o chalet Casi nuevo NA NA NA NA Sur Caliente
5 Casa o chalet NA NA Privado NA NA NA NA
6 Casa adosada Casi nuevo 10 a 20 años Privado NA NA NA NA
数据
data = structure(list(characteristicsAdditional = c("Tipo de inmueble:Piso|Estado:Bien|Antigüedad:30 a 50 años|Parking:Privado|Ascensor:Sí|Consumo energía:|Emisiones:",
"Tipo de inmueble:Piso|Orientación:Sureste|Estado:Muy bien|Antigüedad:30 a 50 años|Consumo energía:|Emisiones:",
"Tipo de inmueble:Apartamento|Orientación:Este|Estado:Bien|Antigüedad:30 a 50 años|Parking:Comunitario|Ascensor:Sí|Amueblado:Sí|Consumo energía:|Emisiones:",
"Tipo de inmueble:Casa o chalet|Orientación:Sur|Agua caliente:Gas Natural|Calefacción:Propano|Estado:Casi nuevo|Amueblado:Sí|Consumo energía:|Emisiones:",
"Tipo de inmueble:Casa o chalet|Parking:Privado|Amueblado:Sí|Consumo energía:|Emisiones:",
"Tipo de inmueble:Casa adosada|Estado:Casi nuevo|Antigüedad:10 a 20 años|Parking:Privado|Consumo energía:|Emisiones:"
)), row.names = c(NA, -6L), class = c("tbl_df", "tbl", "data.frame"
))
我们可以通过用separate_rows
在|
处拆分来扩展第一列characteristicsAdditional
的行,然后用separate
将列拆分为两列,并用pivot_wider
将其整形为宽(最初创建一个行序列(
library(dplyr)
library(tidyr)
data %>%
mutate(rn = row_number()) %>%
separate_rows(characteristicsAdditional, sep = "\|") %>%
separate(characteristicsAdditional, into = c("key", "val"),
sep = ":") %>%
pivot_wider(names_from = key, values_from = val) %>%
select(-rn)
-输出
# A tibble: 6 × 11
`Tipo de inmueble` Estado Antigüedad Parking Ascensor `Consumo energía` Emisiones Orientación Amueblado `Agua caliente` Calefacción
<chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
1 Piso Bien 30 a 50 años Privado Sí "" "" <NA> <NA> <NA> <NA>
2 Piso Muy bien 30 a 50 años <NA> <NA> "" "" Sureste <NA> <NA> <NA>
3 Apartamento Bien 30 a 50 años Comunitario Sí "" "" Este Sí <NA> <NA>
4 Casa o chalet Casi nuevo <NA> <NA> <NA> "" "" Sur Sí Gas Natural Propano
5 Casa o chalet <NA> <NA> Privado <NA> "" "" <NA> Sí <NA> <NA>
6 Casa adosada Casi nuevo 10 a 20 años Privado <NA> "" "" <NA> <NA> <NA> <NA>