【问题标题】:Filter data frames stored in list based on row numbers根据行号过滤存储在列表中的数据帧
【发布时间】:2026-01-30 21:30:02
【问题描述】:

我有以下问题。 我在列表环境中存储多个数据框。我写了一个循环,它应该遍历列表中的数据帧并删除太短的数据帧。但不知何故,从列表中删除数据框并不成功。

datalist # a list containing data frames

for (i in 1:length(datalist)) {
  datset <- datalist[i]
  if (nrow(datset) < 25) {
    sub_name <- names(datset)
    datalist <- datalist[-sub_name]
  }
}

感谢每一个帮助。

【问题讨论】:

    标签: r list loops


    【解决方案1】:

    您可以执行以下操作:

    dataSetRowCounts <- sapply(datalist,NROW)
    datalist[dataSetRowCounts < 25] <- NULL
    datalist
    

    首先,获取列表中每个data.frame 的行数。二、删除少于25行的listelements,设置为NULL

    【讨论】:

    • 完美运行。谢谢! :)
    【解决方案2】:

    或许你可以试试Filter

    Filter(function(x) nrow(x) >= 25, datalist)
    

    subset

    subset(datalist, sapply(datalist, nrow) >= 25)
    

    【讨论】:

      【解决方案3】:

      使用keep的选项

      library(purrr)
      keep(data_list, ~ nrow(.x) >= 25)
      

      【讨论】: