【问题标题】:delete tibble from list when it has zero rows and n() columns当它有零行和 n() 列时,从列表中删除 tibble
【发布时间】:2021-05-13 09:15:13
【问题描述】:

所以我有一个脚本可以生成一组列表作为输出。它第一次在一个包含零行的列表中生成了一个 tibble:

(图片中的testlist[[2]])

这已经停止了前进的过程。

我发现了几个关于删除空 tibble 或类似内容的线程,当它们是与 tibble 或列表相关联的一些操作时,我试图提取建议的几个过滤器部分,仅用于删除 tibble 部分,并且有几个有运行,但没有一个工作。

我想要做的就是从我的列表中删除任何带有“0 行”的小标题。在这种情况下, testlist[[2]] 来自列表。我知道这必须简单得令人尴尬,但我被困住了。

【问题讨论】:

    标签: r list filtering


    【解决方案1】:
    list_of_mtcars <- list(mtcars[1,], mtcars[1:2,], mtcars[0,])
    list_of_mtcars
    # [[1]]
    #           mpg cyl disp  hp drat   wt  qsec vs am gear carb
    # Mazda RX4  21   6  160 110  3.9 2.62 16.46  0  1    4    4
    # [[2]]
    #               mpg cyl disp  hp drat    wt  qsec vs am gear carb
    # Mazda RX4      21   6  160 110  3.9 2.620 16.46  0  1    4    4
    # Mazda RX4 Wag  21   6  160 110  3.9 2.875 17.02  0  1    4    4
    # [[3]]
    #  [1] mpg  cyl  disp hp   drat wt   qsec vs   am   gear carb
    # <0 rows> (or 0-length row.names)
    
    Filter(nrow, list_of_mtcars)
    # [[1]]
    #           mpg cyl disp  hp drat   wt  qsec vs am gear carb
    # Mazda RX4  21   6  160 110  3.9 2.62 16.46  0  1    4    4
    # [[2]]
    #               mpg cyl disp  hp drat    wt  qsec vs am gear carb
    # Mazda RX4      21   6  160 110  3.9 2.620 16.46  0  1    4    4
    # Mazda RX4 Wag  21   6  160 110  3.9 2.875 17.02  0  1    4    4
    

    【讨论】:

    • 谢谢大家。我正式赢得了看不到森林的树木奖。我在两个小时前得到了它,但显然如果你不将结果分配回你的列表,它就不会改变。谁会想到?
    【解决方案2】:

    使用purrr::map_lgl 的选项。

    library(purrr)
    
    tblList[map_lgl(tblList, ~ nrow(.) != 0)]
    
    # [[1]]
    # # A tibble: 1 x 1
    #         x
    #     <dbl>
    #   1     1
    # 
    # [[2]]
    # # A tibble: 1 x 1
    #         x
    #     <dbl>
    #   1     2
    

    数据

    tblList <- list(structure(list(x = 1), row.names = c(NA, -1L), class = c("tbl_df", 
    "tbl", "data.frame")), structure(list(x = numeric(0)), row.names = integer(0), class = c("tbl_df", 
    "tbl", "data.frame")), structure(list(x = 2), row.names = c(NA, 
    -1L), class = c("tbl_df", "tbl", "data.frame")))
    

    【讨论】:

      【解决方案3】:

      keep 的选项

      library(purrr)
      keep(testlist, ~ nrow(.x) > 0)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-07-17
        • 1970-01-01
        • 2016-05-26
        • 1970-01-01
        • 2018-05-03
        • 1970-01-01
        • 2019-12-09
        • 2014-04-01
        相关资源
        最近更新 更多