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

如何在R语言的data.frame中筛选KV之后到NULL前的观测值

筛选R数据框中KV与后续第一个NULL之间的观测值

原始数据

现有如下data.frame:

TypeNumber
a34445
b35485
KV54721
c23456
d79498
NULLNULL
a34445
b71458
KV23456
c45689
d84792
NULLNULL

需求

筛选出Type为KV的观测值之后的所有行,遇到Type为NULL时停止(不包含NULL行),即获取每个KV与其后第一个NULL之间的观测值。

预期结果

最终需要得到如下数据:

TypeNumber
c23456
d79498
c45689
d84792

尝试过的代码

subset(df, c(tail(Type, 1:2) == 'Key Value', TRUE))

解决方案

方法1:Base R实现

通过生成分组标识定位目标区间:

# 为每个KV起始的区块生成分组编号
df$group <- cumsum(df$Type == "KV")
# 筛选符合条件的行,排除KV和NULL本身
result <- df[df$group > 0 & df$Type != "KV" & df$Type != "NULL", c("Type", "Number")]

方法2:dplyr包实现

借助管道语法更直观完成筛选:

library(dplyr)

result <- df %>%
  # 标记每个KV对应的区块
  mutate(block = cumsum(Type == "KV")) %>%
  # 筛选区块内、非KV且非NULL的行
  filter(block > 0, Type != "KV", Type != "NULL") %>%
  # 保留需要的列
  select(Type, Number)

两种方法都能准确提取出每个KV到下一个NULL之间的观测值,得到预期结果。

内容的提问来源于stack exchange,提问作者Victor Hugo Schieck Terziani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 06:50:47