You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将含NA的数据框拆分为连续非NA行的分组数据框列表

提取GeomLine离散线条数据:连续非NA分组转数据框列表

需求说明

处理GeomLine对象的刻度数据时,需要从包含x、y列的数据框中提取离散线条对应的数据。y列存在NA值,要求找出至少包含两行连续无NA值的分组,并将这些分组转换为数据框列表。

示例数据

structure(list(x = c(96, 150, 150, 157, 163, 165, 165, 165, 166, 
    167, 168, 170, 178, 178, 184, 213), y = c(NA, 49, NA, NA, 
    NA, 75, NA, 45, 50, NA, 55, 56.2, 55, 57, 50, NA)), class = "data.frame", 
    row.names = c(NA, -16L))
#>      x    y
#> 1   96   NA
#> 2  150 49.0
#> 3  150   NA
#> 4  157   NA
#> 5  163   NA
#> 6  165 75.0
#> 7  165   NA
#> 8  165 45.0
#> 9  166 50.0
#> 10 167   NA
#> 11 168 55.0
#> 12 170 56.2
#> 13 178 55.0
#> 14 178 57.0
#> 15 184 50.0
#> 16 213   NA

尝试过的代码

以下代码能筛选出符合连续条件的行,但无法直接转换为目标的分组数据框列表:

dplyr::filter(tidyr::drop_na(dplyr::mutate(structure(list(x = c(96, 
    150, 150, 157, 163, 165, 165, 165, 166, 167, 168, 170, 178, 
    178, 184, 213), y = c(NA, 49, NA, NA, NA, 75, NA, 45, 50, 
    NA, 55, 56.2, 55, 57, 50, NA)), class = "data.frame", row.names = c(NA, 
    -16L)), row_id = dplyr::row_number()), y), row_id == dplyr::lead(row_id) - 
    1 | row_id == dplyr::lag(row_id) + 1)
#>     x    y row_id
#> 1 165 45.0      8
#> 2 166 50.0      9
#> 3 168 55.0     11
#> 4 170 56.2     12
#> 5 178 55.0     13
#> 6 178 57.0     14
#> 7 184 50.0     15

期望结果

最终需要得到按连续非NA区块分组的数据框列表:

list(data.frame(x = c(165, 166), y = c(45, 50)), data.frame(x = c(168, 
    170, 178, 178, 184), y = c(55, 56.2, 55, 57, 50)))
#> [[1]]
#>     x  y
#> 1 165 45
#> 2 166 50
#> 
#> [[2]]
#>     x    y
#> 1 168 55.0
#> 2 170 56.2
#> 3 178 55.0
#> 4 178 57.0
#> 5 184 50.0

最终解决方案

使用dplyr和基础R即可实现需求,代码逻辑清晰:

lineData |> 
  group_by(group = cumsum(is.na(y))) |>
  filter(!(is.na(y) & n() > 1)) |> 
  group_split() |>
  Filter(function(x) nrow(x) >= 2, x = _)

代码逻辑说明

  1. group_by(group = cumsum(is.na(y))):以y列的NA值为分隔,给连续非NA的区块分配分组ID
  2. filter(!(is.na(y) & n() > 1)):过滤掉全是NA的分组
  3. group_split():将分组后的数据拆分成数据框列表
  4. Filter(...):只保留行数≥2的分组,即至少包含两行连续非NA值的区块

内容的提问来源于stack exchange,提问作者James

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 23:42:51