这里的初学者。我在最基本的任务中失败了。
两个类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
的每个字符串值合并到b
和a
的每个元素的每个字符串值b
。我使用了不同的搜索字词谷歌如何做到这一点,但结果并不像预期的那样。这与我不知道我要找哪个词的事实有关,因此这个奇怪的标题。我的权利(在撰写本文时)的“类似问题”也没有帮助,我担心。
以下几乎就是我需要的内容,但我需要一个将两个列data.frame
和x
合并为一列的向量,而不是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"
答案 0 :(得分:2)
一种解决方案是为chars实现外部产品:
c(outer(a,b,FUN=paste,sep=""))
这是你想要的吗?
答案 1 :(得分:1)
我非常喜欢法比欧的回答。另一个看起来更快的选项是使用rep
和paste0
:
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