R中的“乘法”/合并/连接字符串(chr)向量

时间:2018-05-15 20:40:40

标签: r

这里的初学者。我在最基本的任务中失败了。

两个类chr和不同长度

的向量
a <- c("3","5","7","X")
b <- c("A","B","C","D","E")

我需要合并它们以获得一个长度$ a \次的新向量b = 20 $(在这种情况下)的形式

> c
[1] "3A" "3B" "3C" "3D" "3E" "5A" "5B" ... 

所以,基本上,我尝试将a的每个字符串值合并到ba的每个元素的每个字符串值b。我使用了不同的搜索字词谷歌如何做到这一点,但结果并不像预期的那样。这与我不知道我要找哪个词的事实有关,因此这个奇怪的标题。我的权利(在撰写本文时)的“类似问题”也没有帮助,我担心。

以下几乎就是我需要的内容,但我需要一个将两个列data.framex合并为一列的向量,而不是y,而不是20 Obs. of 1 variable。 {1}}。我需要胶水!

> c <- merge(a,b)
> c
   x y
1  3 A
2  5 A
3  7 A
4  X A
5  3 B
6  5 B
7  7 B
8  X B
9  3 C
10 5 C
11 7 C
12 X C
13 3 D
14 5 D
15 7 D
16 X D
17 3 E
18 5 E
19 7 E
20 X E
> class(c)
[1] "data.frame"

2 个答案:

答案 0 :(得分:2)

一种解决方案是为chars实现外部产品:

c(outer(a,b,FUN=paste,sep=""))

这是你想要的吗?

答案 1 :(得分:1)

我非常喜欢法比欧的回答。另一个看起来更快的选项是使用reppaste0

paste0(rep(a, length(b)), rep(b, each = length(a)))

计时器上的时间:

> library(microbenchmark)
> microbenchmark(
    c(outer(a,b,FUN=paste,sep="")),
    paste0(rep(a, length(b)), rep(b, each = length(a)))
)
Unit: microseconds
                                                    expr   min    lq     mean median    uq    max neval
                   c(outer(a, b, FUN = paste, sep = "")) 8.021 8.342 11.33799  8.662 9.304 28.231   100
     paste0(rep(a, length(b)), rep(b, each = length(a))) 4.171 4.492  6.63817  4.813 4.973 45.554   100