从字符向量中获取重叠对

时间:2016-08-22 17:52:33

标签: r

所以我有以下字符向量

xx = c("AAA", "ABC", "CBS")
xx
length(nchar(xx))

我试图将其拆分出来,以便我将矢量中的每个字符串都作为两对。在上面的例子中,它看起来像一个数据框,其中:

AAA   ABC
ABC   CBS

我一直试图避免循环,因为我的数据会很大。

split(xx, 2)
split(xx, cut(seq_along(xx), 2, labels = FALSE)) 
split(xx, cut(seq_along(xx), 2, labels = FALSE))[[1]] 
split(xx, cut(seq_along(xx[-1]), 2, labels = FALSE))[[1]] 

关于避免for循环的解决方案的任何建议。

有五个条目:

xx = c("AAA", "ABC", "CBS", "BBB", "GGG")
xx

AAA   ABC
ABC   CBS
CBS   BBB
BBB   GGG

2 个答案:

答案 0 :(得分:1)

使用dplyrtidyr

xx = c("AAA", "ABC", "CBS", "BBB", "GGG")

library(dplyr)
df <- data.frame(col1 = xx) %>% 
    mutate(col2 = lead(col1)) %>% 
    tidyr::drop_na()

输出

#   col1 col2
# 1  AAA  ABC
# 2  ABC  CBS
# 3  CBS  BBB
# 4  BBB  GGG

答案 1 :(得分:1)

我们可以使用data.table

library(data.table)
na.omit(as.data.table(xx)[, xx1 := shift(xx, type = "lead")])
#    xx xx1
#1: AAA ABC
#2: ABC CBS
#3: CBS BBB
#4: BBB GGG