在一个向量中,是否有一种函数可以将所有元素连接起来?

6

我创建了一个向量,它看起来像这样:

v1 <- c("1 1","1 2","1 3",
        "2 1","2 2","2 3",
        "3 1","3 2","3 3",
        "4 1","4 2","4 3",
        "5 1","5 2","5 3",
        "6 1","6 2","6 3")

它可以称为v1。

我想要的结果是“1 1 1 1”、“1 1 1 2”……“6 6 6 6”(总共应该有6x3x6x3=360-36=324个元素放入一个新向量v2中)

然而,我尝试了apply(combn(v1, 2), 2, paste0, collapse=" ")但不完整。

如何实现这个目标?

5个回答

5

获取所有组合,然后粘贴:

v2 <- do.call(paste, expand.grid(v1, v1))

检查输出:

head(v2)
# [1] "1 1 1 1" "1 2 1 1" "1 3 1 1" "2 1 1 1" "2 2 1 1" "2 3 1 1"
tail(v2)
# [1] "5 1 6 3" "5 2 6 3" "5 3 6 3" "6 1 6 3" "6 2 6 3" "6 3 6 3"    
length(v2)
# [1] 324

4
你可以尝试使用outerpaste来制作它。
> (v2 <- c(outer(v1, v1, paste)))
  [1] "1 1 1 1" "1 2 1 1" "1 3 1 1" "2 1 1 1" "2 2 1 1" "2 3 1 1" "3 1 1 1"
  [8] "3 2 1 1" "3 3 1 1" "4 1 1 1" "4 2 1 1" "4 3 1 1" "5 1 1 1" "5 2 1 1"
 [15] "5 3 1 1" "6 1 1 1" "6 2 1 1" "6 3 1 1" "1 1 1 2" "1 2 1 2" "1 3 1 2"
 [22] "2 1 1 2" "2 2 1 2" "2 3 1 2" "3 1 1 2" "3 2 1 2" "3 3 1 2" "4 1 1 2"
 [29] "4 2 1 2" "4 3 1 2" "5 1 1 2" "5 2 1 2" "5 3 1 2" "6 1 1 2" "6 2 1 2"
 [36] "6 3 1 2" "1 1 1 3" "1 2 1 3" "1 3 1 3" "2 1 1 3" "2 2 1 3" "2 3 1 3"
 [43] "3 1 1 3" "3 2 1 3" "3 3 1 3" "4 1 1 3" "4 2 1 3" "4 3 1 3" "5 1 1 3"
 [50] "5 2 1 3" "5 3 1 3" "6 1 1 3" "6 2 1 3" "6 3 1 3" "1 1 2 1" "1 2 2 1"
 [57] "1 3 2 1" "2 1 2 1" "2 2 2 1" "2 3 2 1" "3 1 2 1" "3 2 2 1" "3 3 2 1"
 [64] "4 1 2 1" "4 2 2 1" "4 3 2 1" "5 1 2 1" "5 2 2 1" "5 3 2 1" "6 1 2 1"
 [71] "6 2 2 1" "6 3 2 1" "1 1 2 2" "1 2 2 2" "1 3 2 2" "2 1 2 2" "2 2 2 2"
 [78] "2 3 2 2" "3 1 2 2" "3 2 2 2" "3 3 2 2" "4 1 2 2" "4 2 2 2" "4 3 2 2"
 [85] "5 1 2 2" "5 2 2 2" "5 3 2 2" "6 1 2 2" "6 2 2 2" "6 3 2 2" "1 1 2 3"
 [92] "1 2 2 3" "1 3 2 3" "2 1 2 3" "2 2 2 3" "2 3 2 3" "3 1 2 3" "3 2 2 3"
 [99] "3 3 2 3" "4 1 2 3" "4 2 2 3" "4 3 2 3" "5 1 2 3" "5 2 2 3" "5 3 2 3"
[106] "6 1 2 3" "6 2 2 3" "6 3 2 3" "1 1 3 1" "1 2 3 1" "1 3 3 1" "2 1 3 1"
[113] "2 2 3 1" "2 3 3 1" "3 1 3 1" "3 2 3 1" "3 3 3 1" "4 1 3 1" "4 2 3 1"
[120] "4 3 3 1" "5 1 3 1" "5 2 3 1" "5 3 3 1" "6 1 3 1" "6 2 3 1" "6 3 3 1"
[127] "1 1 3 2" "1 2 3 2" "1 3 3 2" "2 1 3 2" "2 2 3 2" "2 3 3 2" "3 1 3 2"
[134] "3 2 3 2" "3 3 3 2" "4 1 3 2" "4 2 3 2" "4 3 3 2" "5 1 3 2" "5 2 3 2"
[141] "5 3 3 2" "6 1 3 2" "6 2 3 2" "6 3 3 2" "1 1 3 3" "1 2 3 3" "1 3 3 3"
[148] "2 1 3 3" "2 2 3 3" "2 3 3 3" "3 1 3 3" "3 2 3 3" "3 3 3 3" "4 1 3 3"
[155] "4 2 3 3" "4 3 3 3" "5 1 3 3" "5 2 3 3" "5 3 3 3" "6 1 3 3" "6 2 3 3"
[162] "6 3 3 3" "1 1 4 1" "1 2 4 1" "1 3 4 1" "2 1 4 1" "2 2 4 1" "2 3 4 1"
[169] "3 1 4 1" "3 2 4 1" "3 3 4 1" "4 1 4 1" "4 2 4 1" "4 3 4 1" "5 1 4 1"
[176] "5 2 4 1" "5 3 4 1" "6 1 4 1" "6 2 4 1" "6 3 4 1" "1 1 4 2" "1 2 4 2"
[183] "1 3 4 2" "2 1 4 2" "2 2 4 2" "2 3 4 2" "3 1 4 2" "3 2 4 2" "3 3 4 2"
[190] "4 1 4 2" "4 2 4 2" "4 3 4 2" "5 1 4 2" "5 2 4 2" "5 3 4 2" "6 1 4 2"
[197] "6 2 4 2" "6 3 4 2" "1 1 4 3" "1 2 4 3" "1 3 4 3" "2 1 4 3" "2 2 4 3"
[204] "2 3 4 3" "3 1 4 3" "3 2 4 3" "3 3 4 3" "4 1 4 3" "4 2 4 3" "4 3 4 3"
[211] "5 1 4 3" "5 2 4 3" "5 3 4 3" "6 1 4 3" "6 2 4 3" "6 3 4 3" "1 1 5 1"
[218] "1 2 5 1" "1 3 5 1" "2 1 5 1" "2 2 5 1" "2 3 5 1" "3 1 5 1" "3 2 5 1"
[225] "3 3 5 1" "4 1 5 1" "4 2 5 1" "4 3 5 1" "5 1 5 1" "5 2 5 1" "5 3 5 1"
[232] "6 1 5 1" "6 2 5 1" "6 3 5 1" "1 1 5 2" "1 2 5 2" "1 3 5 2" "2 1 5 2"
[239] "2 2 5 2" "2 3 5 2" "3 1 5 2" "3 2 5 2" "3 3 5 2" "4 1 5 2" "4 2 5 2"
[246] "4 3 5 2" "5 1 5 2" "5 2 5 2" "5 3 5 2" "6 1 5 2" "6 2 5 2" "6 3 5 2"
[253] "1 1 5 3" "1 2 5 3" "1 3 5 3" "2 1 5 3" "2 2 5 3" "2 3 5 3" "3 1 5 3"
[260] "3 2 5 3" "3 3 5 3" "4 1 5 3" "4 2 5 3" "4 3 5 3" "5 1 5 3" "5 2 5 3"
[267] "5 3 5 3" "6 1 5 3" "6 2 5 3" "6 3 5 3" "1 1 6 1" "1 2 6 1" "1 3 6 1"
[274] "2 1 6 1" "2 2 6 1" "2 3 6 1" "3 1 6 1" "3 2 6 1" "3 3 6 1" "4 1 6 1"
[281] "4 2 6 1" "4 3 6 1" "5 1 6 1" "5 2 6 1" "5 3 6 1" "6 1 6 1" "6 2 6 1"
[288] "6 3 6 1" "1 1 6 2" "1 2 6 2" "1 3 6 2" "2 1 6 2" "2 2 6 2" "2 3 6 2"
[295] "3 1 6 2" "3 2 6 2" "3 3 6 2" "4 1 6 2" "4 2 6 2" "4 3 6 2" "5 1 6 2"
[302] "5 2 6 2" "5 3 6 2" "6 1 6 2" "6 2 6 2" "6 3 6 2" "1 1 6 3" "1 2 6 3"
[309] "1 3 6 3" "2 1 6 3" "2 2 6 3" "2 3 6 3" "3 1 6 3" "3 2 6 3" "3 3 6 3"
[316] "4 1 6 3" "4 2 6 3" "4 3 6 3" "5 1 6 3" "5 2 6 3" "5 3 6 3" "6 1 6 3"
[323] "6 2 6 3" "6 3 6 3"

4
一个紧凑的方案,包含 levelsinteraction:
levels(interaction(v1, v1, sep = " "))

head(v)
# [1] "1 1 1 1" "1 2 1 1" "1 3 1 1" "2 1 1 1" "2 2 1 1" "2 3 1 1"
tail(v)
# [1] "5 1 6 3" "5 2 6 3" "5 3 6 3" "6 1 6 3" "6 2 6 3" "6 3 6 3"    
length(v)
# [1] 324

使用 pmap_chrexpand.grid 的前一个答案:

library(purrr)
v <- pmap_chr(expand.grid(v1, v1), paste)

length(v)
#[1] 324

2
良好的交互使用! - ThomasIsCoding

1

不确定这是否是您需要的,但expand.grid可能会有用:

library(dplyr)

expand.grid(v1,v1) %>% 
  data.frame() %>% 
  mutate(v2 = paste0(Var2," ",Var1)) %>% 
  pull(v2)

输出:

 [1] "1 1 1 1" "1 1 1 2" "1 1 1 3" "1 1 2 1" ... "6 3 6 1" "6 3 6 2" "6 3 6 3"

非常感谢,我应该写什么代码呢?expand.grid(v1,v1) mutate(v2 =paste0(Var1,Var2)我是R的新手,对于造成的混乱表示抱歉 ; ) - Aoxiang Xin
你是在问这个库吗?dplyr。我认为最好的答案是 v2 <- do.call(paste, expand.grid(v1, v1)),它是基于R语言的。 - Claudio Paladini

1

以下是使用RcppAlgos的一行代码(我是作者):

library(RcppAlgos)
permuteGeneral(v1, 2, TRUE, FUN = \(x) paste(x, collapse = " "), FUN.VALUE = "1")
#>   [1] "1 1 1 1" "1 1 1 2" "1 1 1 3" "1 1 2 1" "1 1 2 2" "1 1 2 3"
#>   [7] "1 1 3 1" "1 1 3 2" "1 1 3 3" "1 1 4 1" "1 1 4 2" "1 1 4 3"
#>     .
#>     .
#>     .
#> [313] "6 3 3 1" "6 3 3 2" "6 3 3 3" "6 3 4 1" "6 3 4 2" "6 3 4 3"
#> [319] "6 3 5 1" "6 3 5 2" "6 3 5 3" "6 3 6 1" "6 3 6 2" "6 3 6 3"

这同样可以扩展到更长的排列,也可以避免重复(即改变m的值和repetition的值)。

注意:如果您想要一个列表,只需将FUN.VALUE保持为NULL即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接