我正在尝试使用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循环,但这会导致一大堆无法正常工作的代码。
我认识到这将是一个很大的载体,所以也许这不是正确的方法?
答案 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'))