【问题标题】:How to elegantly split array of strings in list elements by substring?如何通过子字符串优雅地拆分列表元素中的字符串数组?
【发布时间】:2023-07-02 12:14:01
【问题描述】:

如何根据字符串的第一个字符优雅地将字符串数组拆分为子组?

样本数据:

c("1_autoa", "1_autob", "1_autoc","2_bier", "3_hundx", "3_hundy")

期望的输出:

[[1]]
[1] "1_autoa" "1_autob" "1_autoc"

[[2]]
[1] "2_bier"

[[3]]
[1] "3_hundx" "3_hundy"

list(
  c("1_autoa", "1_autob", "1_autoc"), c("2_bier"), c("3_hundx", "3_hundy"))

我尝试了什么:(工作示例,但看起来很长)

library(dplyr)
library(purrr)
library(magrittr)
data <- data.frame(
  id = 1:6, 
  name = c("1_autoa", "1_autob", "1_autoc", "2_bier", "3_hundx", "3_hundy")
)
data$start <- substr(x = data$name, start = 1, stop = 1)
spread(data, start, name) %>% 
  apply(MARGIN = 2, list) %>% 
  lapply(FUN = function(x) x[[1]][!is.na(x[[1]])])

【问题讨论】:

    标签: r spread


    【解决方案1】:

    简单

    split(x, gsub('\\D+', '', x))
    

    在哪里,

    x <- c("1_autoa", "1_autob", "1_autoc","2_bier", "3_hundx", "3_hundy")
    

    【讨论】:

      【解决方案2】:
      v <- c("1_autoa", "1_autob", "1_autoc","2_bier", "3_hundx", "3_hundy")    
      sapply(1:3, function(i) v[which(sapply(v, function(x) grepl(as.character(i), x)))])
      [[1]]
      [1] "1_autoa" "1_autob" "1_autoc"
      
      [[2]]
      [1] "2_bier"
      
      [[3]]
      [1] "3_hundx" "3_hundy"
      

      【讨论】:

        最近更新 更多