【问题标题】:Splitting the data in brackets in R在R中的括号中拆分数据
【发布时间】:2022-09-23 00:43:41
【问题描述】:

嗨,我有一个看起来像这样的数据集

PTNUM AGE1_2 AGE2_3 AGE3_2
12345 (23,35) NA NA
12346 NA (23,28,34,44) (45,50)
12347 (17,22) NA (38,45)

我想让输出看起来像这样

PTNUM AGE1_1 AGE1_2 AGE2_2 AGE2_3 AGE3_3 AGE3_2
12345 23 35 NA NA NA NA
12346 NA NA 23 28 NA NA
12346 NA NA 34 44 45 50
12347 17 22 NA NA 38 45

我在 R 中尝试了这段代码,只是为了尝试将 AGE1_2 拆分为 AGE1_1 和 AGE1_2,但这导致 AGE1_1 和 AGE1_2 的所有行都是 NA\。

ZX_1_2 <- 提取(ZX, AGE1_2, into = c(\'AGE1_1\', \'AGE1_2\'), 正则表达式 = \"(.?) \\((.?)\\)\")

有人可以帮我得到预期的结果吗?

  • 请重新访问 StackOverflow tour,专门接受答案(为您的 past questions)。

标签: r


【解决方案1】:

我们可以使用

library(purrr)
library(tidyr)
library(stringr)
map_dfc(names(ZX)[-1], ~ df1 %>%
    select(all_of(.x)) %>% 
   extract(1, into = str_c(names(.), "_", 1:2), 
     "\\((\\d+),(\\d+)\\)", convert = TRUE)) %>%
   bind_cols(ZX['PTNUM'], .)

-输出

   PTNUM AGE1_2_1 AGE1_2_2 AGE2_3_1 AGE2_3_2 AGE3_2_1 AGE3_2_2
1 12345       23       35       NA       NA       NA       NA
2 12346       NA       NA       34       40       45       50
3 12347       17       22       NA       NA       38       45

或者另一种选择是

ZX %>% 
  mutate(across(starts_with('AGE'), 
  ~ read.csv(text = str_remove_all(.x, "\\(|\\)"), 
      header = FALSE, fill = TRUE))) %>% 
  unpack(where(is.data.frame), names_sep = "_")

-输出

# A tibble: 3 × 7
  PTNUM AGE1_2_V1 AGE1_2_V2 AGE2_3_V1 AGE2_3_V2 AGE3_2_V1 AGE3_2_V2
  <int>     <int>     <int>     <int>     <int>     <int>     <int>
1 12345        23        35        NA        NA        NA        NA
2 12346        NA        NA        34        40        45        50
3 12347        17        22        NA        NA        38        45

数据

ZX <- structure(list(PTNUM = 12345:12347, AGE1_2 = c("(23,35)", NA, 
"(17,22)"), AGE2_3 = c(NA, "(34,40)", NA), AGE3_2 = c(NA, "(45,50)", 
"(38,45)")), class = "data.frame", row.names = c(NA, -3L))

【讨论】:

  • 谢谢,请检查最新的编辑,我在上一个中的数据出错了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-19
  • 2017-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多