在一个条件下分配一个字符串

Posted

技术标签:

【中文标题】在一个条件下分配一个字符串【英文标题】:assign a string under a condition 【发布时间】:2021-03-17 19:41:40 【问题描述】:

我有一个这样的字符串。

"457, 1480-(5, 12), 83-(1, 2), 484, 484-(2, 3, 8)"

我只想在有括号的情况下为每个元素分配一个标题编号。 我想要的输出是这个

"457, 1480-5, 1480-12, 83-1, 83-2, 484, 484-2, 484-3, 484-8"

我该怎么做?

【问题讨论】:

【参考方案1】:

我不确定我是否完全回答了这个问题,但我已将第一个列表更改为第二个列表(在数据框中)。

  library(tidyverse)
  library(stringi)

  df <- tibble::tribble(
    ~column,
    "457, 480-(5, 12), 483-(1, 2), 484, 484-(2, 3, 8)"
  )

以下使用逗号作为分隔符分隔部分,删除括号,然后我使用 stringi 重新格式化数字。我创建了 2 个额外的列,一个用于主要的 3 位数字(main_number),一个用于子集号(用 - 表示)。重新格式化后,如果没有子集,我将使用 main_number,其余部分粘贴 main_number 和子集这两列。

  df2 <- df %>% 
    mutate(split_out = strsplit(as.character(column), ",")) %>%
    tidyr::unnest(split_out) %>% 
    select(-column) %>% 
    mutate(split_out = str_remove(split_out, "[()]"),
           split_out = str_trim(split_out), # has trailing whitespace
           main_number = case_when(stri_length(split_out) == 3 ~ split_out,
                                   TRUE ~ substr(split_out, 1, str_locate(split_out, "-") -1)),
           subset = case_when(str_detect(split_out, "-") == TRUE ~ substr(split_out,
                                                                          str_locate(split_out, "-"), # where - appears + 1
                                                                          stri_length(split_out)), # the end of the string
                              stri_length(split_out) < 3 ~ paste0("-", split_out),
                              TRUE ~ NA_character_)) %>% 
    fill(main_number, .direction = c("down")) %>% # fill down so the main number is copied down 
    mutate(new_number = case_when(is.na(subset) ~ main_number,
                                  TRUE ~ paste0(main_number, subset)
                                  )) %>% 
    select(new_number)

【讨论】:

非常感谢。不幸的是,我有一个大数据集,stri_length(split_out) 并不总是 3。我更新了这个问题。你能帮我解决更新后的问题吗? 主要数字(例如:410-4000)和子数字(例如:1-20)的范围是多少。这将更好地了解将数字设置为什么,因为您可能需要更改 case_when(stri_length(split_out) => 3 以表示它是否等于或大于 3 个字符。

以上是关于在一个条件下分配一个字符串的主要内容,如果未能解决你的问题,请参考以下文章

Mongoose TypeScript ObjectId 转换 - 类型“字符串”不可分配给类型“条件<ObjectId |未定义>'

Mongoose TypeScript ObjectId 转换 - 类型“字符串”不可分配给类型“条件<ObjectId |未定义>'

按条件连接字符串

自适应 Huffman Java 分配 1 和 0

python怎样将一次循环中不同条件下筛选的字符串合成一个字符串

JAVA笔记---JVM内存图;方法重载条件;输入方法;转义字符;强制类型转换;变量分类及区别;Java命名规范;