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

R语言:基于深层嵌套列表中device字段提取数据

基于Device提取嵌套列表数据的解决方案

下面提供两种针对R语言深度嵌套列表的提取方案,适配你给出的数据结构:

方法1:基础R循环实现

假设你的数据存储在名为exercise_data的列表对象中,通过循环遍历嵌套层级,筛选目标设备的相关数据,并保留顶层元信息:

# 初始化结果容器
extracted_data <- list()

# 提取顶层通用元数据
meta_info <- list(
  participant = exercise_data$participant,
  startTime = exercise_data$startTime,
  title = exercise_data$title,
  numberOfSets = exercise_data$numberOfSets,
  numberOfReps = exercise_data$numberOfReps
)

# 遍历每个重复训练组
for (rep_group in exercise_data$repetitions) {
  # 遍历组内的测量项
  for (measurement in rep_group$measurements) {
    # 筛选指定device的数据
    if (measurement$device == "SENS") {
      # 合并元数据与当前测量数据
      extracted_item <- c(meta_info, list(measurement = measurement))
      extracted_data <- c(extracted_data, list(extracted_item))
    }
  }
}

# 查看提取结果的结构
str(extracted_data, max.level = 3)

方法2:使用purrr包简化嵌套处理

如果已安装tidyverse套件中的purrr包,可通过函数式编程更简洁地完成提取:

library(purrr)

# 定义单组数据的提取逻辑
get_target_measurements <- function(rep_data, target_device = "SENS") {
  # 筛选当前组内符合设备要求的测量项
  valid_measurements <- rep_data$measurements %>%
    keep(~ .x$device == target_device)
  
  # 若存在有效数据,结合顶层元信息返回
  if (length(valid_measurements) > 0) {
    map(valid_measurements, ~ c(
      list(
        participant = exercise_data$participant,
        startTime = exercise_data$startTime,
        title = exercise_data$title
      ),
      list(measurement = .x)
    ))
  } else {
    NULL
  }
}

# 批量处理所有重复组并合并结果
extracted_data <- exercise_data$repetitions %>%
  map(get_target_measurements) %>%
  compact() %>%  # 移除空结果
  flatten()

# 查看提取结果
str(extracted_data, max.level = 3)

注意事项

  • 若需要提取其他设备的数据,只需修改代码中的target_device参数(如替换为其他设备标识)
  • 可根据需求调整meta_info或合并时的字段,保留你需要的顶层信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 02:41:07