【问题标题】:R - Merge 10 pages into one dataframe using FOR-loop or a WHILE-loopR - 使用 FOR 循环或 WHILE 循环将 10 页合并到一个数据帧中
【发布时间】:2020-08-17 03:35:05
【问题描述】:

我需要将 234 条评论数据合二为一。

--

但我必须使用循环自动执行此操作

有人有什么想法吗?

【问题讨论】:

    标签: r dataframe for-loop while-loop


    【解决方案1】:

    更好的是,你可以使用lapply

    do.call("rbind", lapply(1:10, function(x) data.frame(getReviews(368677368, "us", x))))
    

    或者,使用for 循环:

    db_list <- list()
    for(i in 1:10)
    {
     db_list[[i]] <- data.frame(getReviews(368677368, "us", i))
    }
    final_result <- do.call("rbind", db_list)
    

    【讨论】:

    • @JoeBens 如果getReviews 返回一个数据框,那么我显示的第二个代码应该在final_result 中留下一个数据框
    • @JoeBens 我知道你想要它的样子。但是output 不是我回答的一部分。如果您在我上面的答案中运行第二个代码块,final_result 应该是单个数据帧。在你的演示中,你只给我看output,相当于我的db_list。你应该可以从do.call("rbind", db_list)do.call("rbind", output) 得到你想要的结果
    【解决方案2】:

    我不知道你的函数 getReviews 做了什么,所以我把它存根:

    getReviews <- function(pp_id, country, page_num){
      data.frame(pp_id, country, page_num)
    }
    

    这是for 循环。

    output <- NULL  # Best practice is to pre-declare
    cases <- 1:10
    for(i in seq_along(cases)){        # seq_along is better 
      output[[i]] <- getReviews(368677368, "us", i)
    }
    bind_rows(output)
    

    参考:R for Data Science,H Wickham,第 1 版,第 314 页

    【讨论】:

    • @JoeBens,我以为你想要 10 个数据帧。我编辑了它,添加了bind_rows。但你真的应该使用map_df 而不是for 循环。
    猜你喜欢
    • 2014-08-21
    • 1970-01-01
    • 2021-09-26
    • 1970-01-01
    • 2016-10-05
    • 2021-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多