如何用指定格式的值的每种组合在R中创建向量?

时间:2019-01-17 23:07:28

标签: r

我正在尝试使用R创建一个向量,该向量具有指定格式的以下向量中列出的每个字符排列。

a <- c("1","2","3","4","5","6","7","8","9")
b <- c("0","1","2","3","4","5","6","7","8","9")
c <- c("0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","J","K","L","M","N","P","Q","R","S","T","U","V","W","X","Y","Z")

使用上述向量,我想使用以下格式对这些变量的每个排列创建一个新向量:

a
ac
acc
abcc
abbcc

结果应包括如下值:

c("1","1A","348BE")

最初,我尝试使用嵌套的while和for循环,但这会导致一大堆无法正常工作的代码。

我认识到这将是一个很大的载体,所以也许这不是正确的方法?

2 个答案:

答案 0 :(得分:0)

肯定有一种更优雅的方式可以一次获取所有格式,但是您可以对每种格式执行以下操作,然后合并结果:

library(tidyverse)
abbcc <- crossing(a, b, b, c, c) %>% 
  unite("combinations", sep = "")

abbcc
# A tibble: 1,040,400 x 1
   combinations
   <chr>       
 1 10000       
 2 10001       
 3 10002       
 4 10003       
 5 10004       
 6 10005       
 7 10006       
 8 10007       
 9 10008       
10 10009 

答案 1 :(得分:0)

这里是一个相互融合的功能,可以产生您想要的东西

library(dplyr)

item1 <- as.character(1:9)
item2 <- as.character(0:9)
item3 <- c(item2, LETTERS)



fn <- function(x){

    switch(x,
       a = {
         item1
       },
       ac = {
         expand.grid(item1, item3) %>% 
           transmute(val = paste0(Var1, Var2)) %>% 
           .$val
       },
       acc = {
         expand.grid(item1, item3, item3) %>% 
           transmute(val = paste0(Var1, Var2, Var3)) %>%
           .$val
       },
       abcc = {
         expand.grid(item1, item2, item3, item3) %>% 
           transmute(val = paste0(Var1, Var2, Var3, Var4)) %>% 
           .$val
       },
       abbcc = {
         expand.grid(item1, item2, item2, item3, item3) %>% 
           transmute(val = paste0(Var1, Var2, Var3, Var4, Var5)) %>% 
           .$val
       },
       stop("Doing it wrong!")
    )

}

c(fn('a'), fn('ac'), fn('acc'), fn('abcc'), fn('abbcc'))