我知道如何编码以在字符向量中使用步骤 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/