【问题标题】:Selective focus on data table via lookup "list"通过查找“列表”选择性地关注数据表
【发布时间】:2021-04-07 19:38:56
【问题描述】:

我想从 json 数据(数据

staedte_id= list("02000", "09162", "05315", "06412", "08111", "05111", "14713", 
         "05913", "05113", "04011", "14612", "03241", "09564", "05112", "05911", "05124",
         "05711", "05314", "05515", "08212", "08222", "09761", "06414", "05116")
x= data.frame()

for (i in staedte_id){
  
  data <- jsonlite::read_json('https://deutschland-studie-senioren-familie.zdf.de/assets/data/senioren/districts.json')$districts$i
  
  df <- map_df(data, function(x) {
    data.frame(
      name = x %>% {.$name},
      verkehrssicherheit = x %>% {.$parts$si$indicators$si1}
    ) }
    )
  x = rbind(x,df)

}

【问题讨论】:

    标签: r json web-scraping rvest


    【解决方案1】:

    将 ids 添加为列,然后过滤目标列表上的数据框

    library(jsonlite)
    library(tidyverse)
    
    data <- jsonlite::read_json('https://deutschland-studie-senioren-familie.zdf.de/assets/data/senioren/districts.json')$districts
    
    df <- map_df(data, function(x) {
      data.frame(
        name = x %>% {.$name},
        rank = x %>% {.$overall$rank}
      )
    })
    
    df$id <- names(data)
    
    staedte_id <- list("02000", "09162", "05315", "06412", "08111", "05111", "14713", 
                     "05913", "05113", "04011", "14612", "03241", "09564", "05112", "05911", "05124",
                     "05711", "05314", "05515", "08212", "08222", "09761", "06414", "05116")
    
    
    df <- df[which((df$id %in% staedte_id)==TRUE), ]
    df <- df[order(df$rank),]
    

    你也可以从 dplyr 借用函数:

    library(jsonlite)
    library(tidyverse)
    
    data <- jsonlite::read_json('https://deutschland-studie-senioren-familie.zdf.de/assets/data/senioren/districts.json')$districts
    
    df <- map_df(data, function(x) {
      data.frame(
        name = x %>% {.$name},
        rank = x %>% {.$overall$rank}
      )
    })
    
    df$id <- names(data)
    
    staedte_id <- list("02000", "09162", "05315", "06412", "08111", "05111", "14713", 
                     "05913", "05113", "04011", "14612", "03241", "09564", "05112", "05911", "05124",
                     "05711", "05314", "05515", "08212", "08222", "09761", "06414", "05116")
    
    df <- dplyr::arrange(dplyr::filter(df, id %in% staedte_id), rank)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多