r语言 - 分隔 () 或 cSplit() 首先按 "|" 然后按 ":" 填充单个列的数据框



我有一些数据,看起来像:

# 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中,我想以以下方式拆分它:

  1. 首先由|执行-因为:
  • 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>  

相关内容

最新更新