【问题标题】:How to convert the result of lapply with NA items to a data frame in R?如何将带有NA项目的lapply结果转换为R中的数据框?
【发布时间】:2019-03-29 05:52:50
【问题描述】:

由于lapply,我有一个列表,其中函数被trycatch 函数覆盖,因为我有一个超长的列表,我需要我的代码在不被任何错误停止的情况下通过。结果如下所示:

我尝试过使用

test12 <- data.frame(matrix(unlist(y), nrow=length(y), byrow = T))

但是,数据框看起来很奇怪,而且并不是我想要的顺序。看起来 NA [[20]] 在数据框中创建了一个中断。任何人都有如何将此列表转换为数据框的经验?预期的列是:TitleDescriptionKeywords,是否可以在所有 3 列中将那些 NA 类似项 [[20]] 作为 NA 值?谢谢。

【问题讨论】:

  • 一个可重复的例子会有所帮助 - 或者至少是你的tryCatch 表达式。你可以试试tryCatch({ do stuff }, error=function(e) list(Title=NA, Description=NA, Keywords=NA))

标签: r dataframe lapply


【解决方案1】:

使用基础 R 我们可以做到

do.call(rbind.data.frame, y)

#           Title Description Keywords
#2  Tetris Layout          NA       NA
#21 Tetris Layout          NA       NA
#3           <NA>          NA       NA
#4  Tetris Layout          NA       NA

数据

y <- list(list(Title = "Tetris Layout", Description = NA, Keywords= NA), 
          list(Title = "Tetris Layout", Description = NA, Keywords= NA), 
          NA, 
          list(Title = "Tetris Layout", Description = NA, Keywords= NA))

【讨论】:

  • 嘿@Ronak,谢谢你的建议。我想我的列表要长得多,出于某种原因rbind.data.frame 不起作用。所以我改成了data.frame(do.call(rbind, y),一切都很好。我猜rbind.data.frame 可能只适用于较小的列表?
  • @cheklapkok 这很奇怪......我不知道为什么......无论如何,很高兴你能解决这个问题。
【解决方案2】:

tidyverse 的另一个选项

library(tidyverse)
map_df(liste,  as_tibble) %>%
          select(1:3)
# A tibble: 4 x 3
#  Title Description Keyword
#  <chr> <chr>       <chr>  
#1 xxx   xxx2        xxx3   
#2 yyy   yyy2        yyy3   
#3 <NA>  <NA>        <NA>   
#4 zzz   zzz2        zzz3   

数据

liste  <- list(list("Title" = "xxx", "Description" = "xxx2", "Keyword" = "xxx3"),
             list("Title" = "yyy", "Description" = "yyy2", "Keyword" = "yyy3"),
             NA,
             list("Title" = "zzz", "Description" = "zzz2", "Keyword" = "zzz3"))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-09
    • 2014-06-04
    • 1970-01-01
    • 1970-01-01
    • 2019-06-16
    • 2014-09-20
    • 1970-01-01
    • 2021-12-08
    相关资源
    最近更新 更多