【问题标题】:r: filter_at or filter_all strings that meets two conditions and then pivot_longerr: filter_at 或 filter_all 满足两个条件的字符串然后pivot_longer
【发布时间】:2023-01-25 19:30:59
【问题描述】:

我有一个非常大的数据框,它记录了多次随访的 MRI 扫描中的肿瘤大小。

假设我有p

   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

如您所见,数据记录了肿瘤的二维“xy”轴数据。但是,有两个问题:

(1)那些注册数据的人不小心记录了一些患者的三维,“xyz”轴。这在p$debut_extramea_xy_dimension_MR的第2行中进行了演示,对应于p$id == 434

(2)在某些情况下,测量单位被意外记录,例如。 “mm”如p$fu1_extramea_xy_dimension_MR第3行,对应p$id == 437

我需要 filterpivot_longer 所以我获得了一个包含三列的数据框:(1) id,(2) 在什么后续和 (3) 什么错误。我需要手动进入数据库来改变它,所以这些信息会很有帮助。

预期产出

   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")

【问题讨论】:

    标签: r dataframe dplyr filter pivot


    【解决方案1】:

    这是一个解决方案

    library(tidyverse)                                                                                                                                                                                                                                                                                                                                                                                               -5L), class = "data.frame")
    p %>%
      filter(if_any(- id, ~ str_detect(., rgx <<- "x.*x|mm"))) %>% 
      pivot_longer(-id) %>% 
      filter(str_detect(value, rgx)) %>% 
      mutate(name = str_remove(name, "_extramea_xy_dimension_MR"))
    
    # 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  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多