我是R的新手,但我正试图在R中制作一个滑动窗口。
使用循环我可以这样,但效率非常低。
results=c(1:7)
letters=c("A","B","C","D","E","F","G","H","I","J")
for(i in 1:7){
results[i]=paste(letters[i:(i+3)],collapse="")
}
如何使用apply函数获取相同的输出?
答案 0 :(得分:9)
与拉姆纳特的回答略有不同:
lets <- LETTERS[1:10]
substring(paste(lets,collapse=""),1:7,4:10)
#[1] "ABCD" "BCDE" "CDEF" "DEFG" "EFGH" "FGHI" "GHIJ"
答案 1 :(得分:4)
这是一种方法
sapply(1:7, function(i) {
paste(letters[i:(i+3)], collapse = '')
})
答案 2 :(得分:4)
使用zoo
时间序列包:
apply(rollapply(letters,4,c), 1, paste, collapse="")
[1] "ABCD" "BCDE" "CDEF" "DEFG" "EFGH" "FGHI" "GHIJ"
答案 3 :(得分:3)
为了好玩,“滚动你自己”的方式:
## n letters
nl <- 10
## length of string
len <- 4
## note I use the inbuilt LETTERS
apply(matrix(LETTERS[seq_len(nl)], nl + 1, len), 1, paste, collapse = "")[seq_len(nl - len + 1)]
(根据不完全回收给你留下警告,但我喜欢使用矩阵为滚动窗口提供偏移的技巧)。