【问题标题】:How to remove dataframes where nrow<n from a list of dataframes?如何从数据框列表中删除 nrow<n 的数据框?
【发布时间】:2020-02-14 09:21:05
【问题描述】:

我有一个数据框列表,大小不等。我想删除那些行数很少的(比如说

这是我迄今为止一直在使用的东西,值得:

d1 <- data.frame(y1 = c(1, 2, 3, 9), y2 = c(4, 5, 6, 7))
d2 <- data.frame(y1 = c(3, 2, 1, 6), y2 = c(6, 5, 4, 4))
d3 <- data.frame(y1 = c(3, 2), y2 = c(6, 5))
d4 <- data.frame(y1 = c(3, 2), y2 = c(6, 5))
listdfs <- list(d1, d2, d3, d4)


listdfs2<-lapply(listdfs,function(x) if(nrow<10<-NULL)))

所以基本上d1和2应该保持。

谢谢。

【问题讨论】:

标签: r list dataframe


【解决方案1】:

这可以通过Filter完成,即

Filter(function(i) nrow(i) > 3, listdfs)

[[1]]
  y1 y2
1  1  4
2  2  5
3  3  6
4  9  7

[[2]]
  y1 y2
1  3  6
2  2  5
3  1  4
4  6  4

【讨论】:

    【解决方案2】:

    另一种选择是使用来自purrrdiscard

    purrr::discard(listdfs, ~ nrow(.) < 3)
    
    [[1]]
      y1 y2
    1  1  4
    2  2  5
    3  3  6
    4  9  7
    
    [[2]]
      y1 y2
    1  3  6
    2  2  5
    3  1  4
    4  6  4
    
    

    【讨论】:

      【解决方案3】:

      你可以这样做:

      listdfs[lapply(listdfs, nrow) > 3]
      
      [[1]]
        y1 y2
      1  1  4
      2  2  5
      3  3  6
      4  9  7
      
      [[2]]
        y1 y2
      1  3  6
      2  2  5
      3  1  4
      4  6  4
      
      

      【讨论】:

      • sapply 而不是lapply
      • 在这种情况下他有什么优势?
      • 您想向&lt; 提供一个整数向量,而不是整数标量列表。
      猜你喜欢
      • 2021-09-29
      • 1970-01-01
      • 2011-03-16
      • 2021-01-12
      • 1970-01-01
      • 2021-12-05
      • 1970-01-01
      • 2021-11-06
      • 2017-10-28
      相关资源
      最近更新 更多