r - 如何在 r 中的字符向量上对步骤 2 的滑动窗口进行排序

标签 r vector character sequence

我知道如何编码以在字符向量中使用步骤 1 对 3 的滑动窗口进行排序,但步骤 2 是否需要 seq 函数?

所以对于第 1 步:

v <- c("ace", "king", "queen", "jack", "joker")

for(i in 1:3) {
    print(paste(v[i], v[i + 1], v[i + 2]))
}
## ace king queen
## king queen jack
## queen jack joker 

我如何修改它以使其步长为 2,即获取输出:

## ace king queen
## queen jack joker 

最佳答案

我们可以使用 data.table 中的 shift 来实现此目的,其中 type='lead' 并将 'n' 指定为 vector 序列从 0 到 2

library(data.table)
do.call(rbind, shift(vector, 0:2, type = "lead"))[,1:3]
#     [,1]    [,2]    [,3]   
#[1,] "ace"   "king"  "queen"
#[2,] "king"  "queen" "jack" 
#[3,] "queen" "jack"  "joker"

如果我们想要第二个序列,则使用n = c(0, 2)

do.call(rbind, shift(vector, c(0, 2), type = "lead"))[, 1:3]
#     [,1]    [,2]   [,3]   
#[1,] "ace"   "king" "queen"
#[2,] "queen" "jack" "joker"

或者我们可以使用 zoo 中的 rollapply

library(zoo)
rollapply(vector, 3, FUN = I)[c(TRUE, FALSE),]
#     [,1]    [,2]   [,3]   
#[1,] "ace"   "king" "queen"
#[2,] "queen" "jack" "joker"

或者仅使用基础R

apply(embed(vector, 3), 1, rev)[c(TRUE, FALSE),]
#     [,1]    [,2]   [,3]   
#[1,] "ace"   "king" "queen"
#[2,] "queen" "jack" "joker"

数据

vector <- c('ace', 'king', 'queen', 'jack', 'joker')

关于r - 如何在 r 中的字符向量上对步骤 2 的滑动窗口进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43798887/

相关文章:

c++ - 如何实现 "InterpolatedVector"?

c++ - 将数组复制到 std::vector

c++ - 在 Rcpp 和 C++ 之间转换 vector (使用 Rcpp::as 或 Rcpp::wrap)是否会创建一个新 vector 并复制元素?

java - 在 Android 中显示基于字符的语言?

vim - 更改VIM中接下来的N个字符

r - 如何将函数应用于特定列而不丢失其他列?

r - 尝试将 selectInput() 添加到 flexdashboard 时 Pandoc 文档转换失败

r - 使用 R 和 RCurl 连接到 SFTP 的问题

r - 使用浏览器时在调用堆栈中搜索对象

c - 在 C 中使用 getchar() 对输入进行消音