dplyr ::突变 - 将字符串分为多行

发布于 2025-02-12 07:13:57 字数 453 浏览 1 评论 0原文

我有一个这样的数据框架:

df <- data.frame(quadrant = rep(2:3, each = 3, times = 1),
                 ICD = c("S06|D11|A41|O34|O48",
                         "R55|A08|K40",
                         "N23|F13|K80|F19",
                         "R13|C18",
                         "E13|F19",
                         "D11|A41|N23|K80"))

我想将字符串变量拆分,在重复象限标识符时为每个ICD生成一个新行。

有人知道一种如何通过dplyr :: Mutate来处理它的方法吗?

I have a data frame like this:

df <- data.frame(quadrant = rep(2:3, each = 3, times = 1),
                 ICD = c("S06|D11|A41|O34|O48",
                         "R55|A08|K40",
                         "N23|F13|K80|F19",
                         "R13|C18",
                         "E13|F19",
                         "D11|A41|N23|K80"))

I want to split up the string variable, generate a new row for each ICD while repeating the quadrant identifier.

Does somebody know a way how to handle this via dplyr::mutate?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

最佳男配角 2025-02-19 07:13:57

我将从tidyr

library(tidyr)

df |>
  separate_rows(ICD, sep = "\\|")

I would use separate_rows from tidyr:

library(tidyr)

df |>
  separate_rows(ICD, sep = "\\|")
梦过后 2025-02-19 07:13:57

您可以使用以下代码:

df <- data.frame(quadrant = rep(2:3, each = 3, times = 1),
                 ICD = c("S06|D11|A41|O34|O48",
                         "R55|A08|K40",
                         "N23|F13|K80|F19",
                         "R13|C18",
                         "E13|F19",
                         "D11|A41|N23|K80"))

library(dplyr)
library(tidyr)

df %>% 
  dplyr::mutate(ICD = strsplit(as.character(ICD), "|", fixed = TRUE)) %>%
  unnest(ICD)
#> # A tibble: 20 × 2
#>    quadrant ICD  
#>       <int> <chr>
#>  1        2 S06  
#>  2        2 D11  
#>  3        2 A41  
#>  4        2 O34  
#>  5        2 O48  
#>  6        2 R55  
#>  7        2 A08  
#>  8        2 K40  
#>  9        2 N23  
#> 10        2 F13  
#> 11        2 K80  
#> 12        2 F19  
#> 13        3 R13  
#> 14        3 C18  
#> 15        3 E13  
#> 16        3 F19  
#> 17        3 D11  
#> 18        3 A41  
#> 19        3 N23  
#> 20        3 K80

在2022-06-30创建的 reprex package (v2(v2)。 0.1)

You can use the following code:

df <- data.frame(quadrant = rep(2:3, each = 3, times = 1),
                 ICD = c("S06|D11|A41|O34|O48",
                         "R55|A08|K40",
                         "N23|F13|K80|F19",
                         "R13|C18",
                         "E13|F19",
                         "D11|A41|N23|K80"))

library(dplyr)
library(tidyr)

df %>% 
  dplyr::mutate(ICD = strsplit(as.character(ICD), "|", fixed = TRUE)) %>%
  unnest(ICD)
#> # A tibble: 20 × 2
#>    quadrant ICD  
#>       <int> <chr>
#>  1        2 S06  
#>  2        2 D11  
#>  3        2 A41  
#>  4        2 O34  
#>  5        2 O48  
#>  6        2 R55  
#>  7        2 A08  
#>  8        2 K40  
#>  9        2 N23  
#> 10        2 F13  
#> 11        2 K80  
#> 12        2 F19  
#> 13        3 R13  
#> 14        3 C18  
#> 15        3 E13  
#> 16        3 F19  
#> 17        3 D11  
#> 18        3 A41  
#> 19        3 N23  
#> 20        3 K80

Created on 2022-06-30 by the reprex package (v2.0.1)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文