gpt4 book ai didi

r - 如何在复杂数据的情况下分离行

转载 作者:行者123 更新时间:2023-12-04 03:24:23 27 4
gpt4 key购买 nike

说实话这个问题本来就不是我的。 This problem提示我将其放在一个简化的案例中。

因此,我必须根据分隔符将输入到单元格(以列为单位)的数据分隔到单独的行中,在当前情况下为 ;。这可以使用 tidyr::separate_rows() 轻松完成。 nearly 列中的数据已经串联。现在的问题,实际上是两个,是 -

  1. 可以有由 ; 分隔的文本,但可以在右括号 () 内,例如(text_A;text_B) 将保持连接而不是分开。
  2. 每行中不同列的单元格之间的连接数可能不均匀。在这种情况下,该行将被分成等于最大连接数的 separate rows。对于连接较少的其他每一列,最后一个 text_value 可能只是重复。

一个可重现的例子如下

input <- data.frame(
stringsAsFactors = FALSE,
col_1 = c("A", "B", "C"),
Col_2 = c("Text_A;Text_B","Text_C","Text_D;(Text_E;Text_F)"),
Col_3 = c("Text_1", "Text_2;Text_3", "Text_4"),
Col_4 = c("Text_a;(Text_b;Text_c);(Text_d;Text_dd)","Text_e","Text_f;Text_g")
)

input
col_1 Col_2 Col_3 Col_4
1 A Text_A;Text_B Text_1 Text_a;(Text_b;Text_c);(Text_d;Text_dd)
2 B Text_C Text_2;Text_3 Text_e
3 C Text_D;(Text_E;Text_F) Text_4 Text_f;Text_g

期望的输出如下:

output
#> col_1 Col_2 Col_3 Col_4
#> 1 A Text_A Text_1 Text_a
#> 2 A Text_B Text_1 (Text_b;Text_c)
#> 3 A Text_B Text_1 (Text_d;Text_dd)
#> 4 B Text_C Text_2 Text_e
#> 5 B Text_C Text_3 Text_e
#> 6 C Text_D Text_4 Text_f
#> 7 C (Text_E;Text_F) Text_4 Text_g

tidyverse 以外的答案也是可以接受的。

最佳答案

这是我的方法,仅假设没有序列 "<sep>"在您的专栏中:

input %>%
mutate(across(-col_1,
~ str_replace_all(., "\\([^)]*\\)",
\(x) str_replace_all(x, ";", "<sep>")))) %>%
pmap(\(...) {
args <- list(...)
entries <- map(args[-1], ~ first(str_split(., ";")))
map(entries, \(e) {
c(e, rep(e[length(e)], do.call(max, map(entries, length)) - length(e)))
}) %>%
bind_rows() %>%
bind_cols(args[1], .)
}) %>%
bind_rows() %>%
mutate(across(-col_1, ~ str_replace_all(., "<sep>", ";")))

返回:

# A tibble: 7 x 4
col_1 Col_2 Col_3 Col_4
<chr> <chr> <chr> <chr>
1 A Text_A Text_1 Text_a
2 A Text_B Text_1 (Text_b;Text_c)
3 A Text_B Text_1 (Text_d;Text_dd)
4 B Text_C Text_2 Text_e
5 B Text_C Text_3 Text_e
6 C Text_D Text_4 Text_f
7 C (Text_E;Text_F) Text_4 Text_g

关于r - 如何在复杂数据的情况下分离行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67885176/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com