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

如何用filter和pivot_longer筛选规整肿瘤MRI尺寸数据错误记录

提取肿瘤MRI随访记录中的错误条目

我有一个记录多次随访肿瘤MRI扫描XY轴尺寸的大型DataFrame,示例数据如下:

id debut_extramea_xy_dimension_MR fu1_extramea_xy_dimension_MR fu2_extramea_xy_dimension_MR fu3_extramea_xy_dimension_MR
1 134                          14x14                        14x14                    12.5x10.5                    12.5x10.5
2 434                   24 x 19 x 13                      24 x 17                      24 x 17                      21 x 16
3 437                        40 x 30                   20 x 20 mm                      20 x 20                      25 x 18
4 440                        26 x 24                      26 x 24                      26 x 24                      26 x 24
5 498                         13x6.4                     14.8x8.7                    19.4x12.3                    21.7x13.5

数据存在两类错误:

  • 部分记录被误存为XYZ三维尺寸(如id=434的debut字段)
  • 部分记录额外添加了计量单位(如id=437的fu1字段)

需要使用dplyr的pivot_longer和filter函数,提取出包含id、随访阶段、错误内容的三列DataFrame,用于手动修正数据库。期望输出:

id  name        value
1 434 debut 24 x 19 x 13
2 437   fu1   20 x 20 mm

数据结构定义:

p <- structure(list(id = c(134L, 434L, 437L, 440L, 498L), debut_extramea_xy_dimension_MR = c("14x14", 
                                                                                    "24 x 19 x 13", "40 x 30", "26 x 24", "13x6.4"), fu1_extramea_xy_dimension_MR = c("14x14", 
                                                                                                                                                                  "24 x 17", "20 x 20 mm", "26 x 24", "14.8x8.7"), fu2_extramea_xy_dimension_MR = c("12.5x10.5", 
                                                                                                                                                                                                                                                 "24 x 17", "20 x 20", "26 x 24", "19.4x12.3"), fu3_extramea_xy_dimension_MR = c("12.5x10.5", 
                                                                                                                                                                                                                                                                                                                                 "21 x 16", "25 x 18", "26 x 24", "21.7x13.5")), row.names = c(NA, 
                                                                                                                                                                                                                                                                                                                                                                                               -5L), class = "data.frame")

解决代码

使用dplyr包的函数完成转换和筛选:

library(dplyr)
library(stringr)

p_clean <- p %>%
  # 将宽格式转为长格式,提取并简化随访阶段名称
  pivot_longer(
    cols = starts_with(c("debut", "fu")),
    names_to = "name",
    values_to = "value",
    names_transform = list(name = ~ sub("_extramea_xy_dimension_MR", "", .x))
  ) %>%
  # 筛选两类错误记录
  filter(
    # 匹配包含2个及以上"x"(含空格)的三维记录
    str_count(value, "\\s*x\\s*") >= 2 | 
    # 匹配包含"mm"单位的记录
    grepl("mm", value)
  )

print(p_clean)

代码说明

  1. pivot_longer:将多列随访数据转为长格式,通过names_transform去掉字段名中冗余的后缀,得到简洁的随访阶段名称(如debu转为debut,fu1_extramea_xy_dimension_MR转为fu1)。
  2. filter:通过正则表达式精准筛选错误条目:
    • str_count(value, "\\s*x\\s*") >= 2:统计记录中"x"(含前后空格)的数量,≥2则判定为三维尺寸错误。
    • grepl("mm", value):检查记录是否包含"mm"字符串,判定为多余单位错误。

输出结果

# A tibble: 2 × 3
     id name  value         
  <int> <chr> <chr>         
1   434 debut 24 x 19 x 13  
2   437 fu1   20 x 20 mm

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 11:01:34