列出到r中的data.frame

时间:2018-07-03 11:21:25

标签: r performance list dataframe

有没有更好的方法可以将巨大的列表(超过100k)转换为data.frame。

for (i in 1:length(google_20180623_list)) {

    if (google_20180623_list[[i]]$status != "OK") next

    name <- google_20180623_list[[i]]$result$name
    formatted_address <- google_20180623_list[[i]]$result$formatted_address
    place_id <- google_20180623_list[[i]]$result$place_id
    geom <- data.frame(google_20180623_list[[i]]$result$geometry$location)
    types <- google_20180623_list[[i]]$result$types
    types <- paste(types, collapse = "/")

    oa <- google_20180623_list[[i]]$result$opening_hours$weekday_text
    if (is.null(oa)){
        oa <- NA

    } else {
        oa <- as.data.frame(oa)
        oa <- oa %>% separate(oa,into=c("days", "opening"), sep=": ", remove=T)
        oa <- oa %>% spread(key = "days", value = "opening")
    }      
    rating <- google_20180623_list[[i]]$result$rating
    if (is.null(rating)) {rating<-NA}

    price_level <- google_20180623_list[[i]]$result$price_level
    if (is.null(price_level)) {price_level<-NA}

    phone <- google_20180623_list[[i]]$result$international_phone_number
    if (is.null(phone)) {phone<-NA}

    website <- google_20180623_list[[i]]$result$website
    if (is.null(website)) {website<-NA}
    cb<-cbind(place_id
                ,name
                ,formatted_address
                ,geom
                ,phone
                ,website
                ,rating
                ,price_level
                ,oa
                ,types
      )

    google_20180623_list_unlist<-rbindlist(list(google_20180623_list_unlist,cb),fill = T)

}

此代码非常慢,需要24多个小时。任何想法?

数据来自google place details api。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我认为,使用另一种编程语言来完成该任务将更加高效。尝试将其转换为文件,然后使用R读取。