【问题标题】:Convert character vector to a new vector of substrings将字符向量转换为新的子字符串向量
【发布时间】:2018-08-03 12:04:04
【问题描述】:

假设我有一个字符向量a <- c("take", "me", "home", "run", "do", "eat")。我想创建一个函数,可以接收这个字符向量和一些值 n,然后说 n=2 你得到:

c("take me", "home run", "do eat")

如果n=3 那么你会得到:

c("take me home", "run do eat")

实现这一目标的最有效方法(最快且最具可扩展性)是什么?

【问题讨论】:

  • 我想我的意思是最快和最可扩展的代码。
  • 谢谢...我在您的问题中进行了编辑和添加。我删除了那条评论,并会稍后删除这条评论以保持这篇文章的整洁。

标签: r regex string


【解决方案1】:
a <- c("take", "me", "home", "run", "do", "eat")
l <- length(a)

n <- 2    
tapply(a, rep(1:ceiling(l/n), rep(n, ceiling(l/n)))[1:l], paste, collapse = " ")
         1          2          3 
 "take me" "home run"   "do eat" 

n <- 3
tapply(a, rep(1:ceiling(l/n), rep(n, ceiling(l/n)))[1:l], paste, collapse = " ")
             1              2 
"take me home"   "run do eat" 

n <- 4
tapply(a, rep(1:ceiling(l/n), rep(n, ceiling(l/n)))[1:l], paste, collapse = " ")
                 1                  2 
"take me home run"           "do eat" 

【讨论】:

    【解决方案2】:

    你可以试试这个。

    library(dplyr)
    a <- c("take", "me", "home", "run", "do", "eat")
    
    group_string <- function(vec, n){
        df <- data_frame(string = vec, ind = ceiling(grep("^.*?", a)/ n)) %>% 
            group_by(ind) %>% 
            summarise(string = paste(string, collapse = " "))
        return(df$string)
    }
    
    group_string(a,2)
    [1] "take me"  "home run" "do eat"  
    
    group_string(a,3)
    [1] "take me home" "run do eat"  
    

    【讨论】:

      【解决方案3】:

      这个函数可以解决问题。

      conFun <- function(v,n){
        while(length(v)>0){
          print(v[1:n])
          v <- v[-(1:n)]
        }
      }
      
      conFun(a,3)
      
      [1] "take" "me"   "home"
      [1] "run" "do"  "eat"
      

      【讨论】:

        猜你喜欢
        • 2020-02-27
        • 1970-01-01
        • 1970-01-01
        • 2021-09-19
        • 2017-12-11
        • 2013-03-02
        • 1970-01-01
        • 2019-10-26
        • 1970-01-01
        相关资源
        最近更新 更多