代码之家  ›  专栏  ›  技术社区  ›  Mark Henry

r中字符串数组到数据帧的转换

  •  0
  • Mark Henry  · 技术社区  · 6 年前

    places = [[\"Abtenau\", \"Abtenau\", 767, 52, 3.0000],[\"Achenkirch\", \"Achenkirch am Achensee\", 248, 61, 6.0000],[\"Adelharz\", \"Adelharz\", 47, 46, 2.0000],[\"Alpbach\", \"Alpbachtal\", 2629, 89, 2.0000]]
    
    0 回复  |  直到 6 年前
        1
  •  2
  •   akrun    6 年前

    一个选择是 jsonlite 转换为 matrix ,然后将其更改为 data.frame retype

    library(jsonlite)
    library(hablar)
    library(dplyr)
    fromJSON(places) %>% 
         as.data.frame %>% 
         retype
    # A tibble: 4 x 5
    #  V1         V2                        V3    V4    V5
    #  <chr>      <chr>                  <int> <int> <int>
    #1 Abtenau    Abtenau                  767    52     3
    #2 Achenkirch Achenkirch am Achensee   248    61     6
    #3 Adelharz   Adelharz                  47    46     2
    #4 Alpbach    Alpbachtal              2629    89     2
    

    或者这可以通过 base R 用regex去掉方括号之后

    read.csv(text = gsub('[][]|"', "", gsub("(?<=\\]),(?=\\[)", "\n",
      places, perl = TRUE)), header = FALSE, stringsAsFactors = FALSE)
    #          V1                      V2   V3 V4 V5
    #1    Abtenau                 Abtenau  767 52  3
    #2 Achenkirch  Achenkirch am Achensee  248 61  6
    #3   Adelharz                Adelharz   47 46  2
    #4    Alpbach              Alpbachtal 2629 89  2
    

    数据

    places <- "[[\"Abtenau\", \"Abtenau\", 767, 52, 3.0000],[\"Achenkirch\", \"Achenkirch am Achensee\", 248, 61, 6.0000],[\"Adelharz\", \"Adelharz\", 47, 46, 2.0000],[\"Alpbach\", \"Alpbachtal\", 2629, 89, 2.0000]]"