R - 通过多个分隔符(保留它们)将列拆分为不等数量的列

问题描述 投票:0回答:1

假设我有一个像这样的数据框(我的问题的简化、类似版本):

ID <- c(1,2)
value <- c("1+4-3","2+7-6+4-3")
data.frame(ID,value)

ID  value
1   1+4-3
2   2+7-6+4-3
3   -1+3

我需要通过多个分隔符(

value
+
)将
-
列拆分为多列,同时将分隔符保留在单独的列中。

生成的数据框应该是这样的:

ID  x1  x2  x3  x4  x5   x6   x7   x8   x9
1   1   +   4   -   3    <NA> <NA> <NA> <NA>
2   2   +   7   -   6    +    4    -    3
3   -   1   +   3   <NA> <NA> <NA> <NA> <NA>

此外,我不知道需要多少个结果列(可能不是示例中的 9 个,而是 50 个)。

实现这一目标的最佳方法是什么?

谢谢

r dplyr split tidyr
1个回答
0
投票

如果您的数字仅由

digits
组成,您可以尝试

df %>%
  mutate(value = str_extract_all(value, "\\d+|\\D")) %>%
  unnest(value) %>%
  mutate(name = seq_len(n()), .by = ID) %>%
  pivot_wider(names_prefix = "X")

这给出了

# A tibble: 2 × 10
     ID X1    X2    X3    X4    X5    X6    X7    X8    X9
  <dbl> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
1     1 1     +     4     -     3     NA    NA    NA    NA
2     2 2     +     7     -     6     +     4     -     3  
© www.soinside.com 2019 - 2024. All rights reserved.