使用粘贴来组合字母或循环。 [R

时间:2014-02-24 04:00:37

标签: r loops concatenation paste

我是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函数获取相同的输出?

4 个答案:

答案 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)]

(根据不完全回收给你留下警告,但我喜欢使用矩阵为滚动窗口提供偏移的技巧)。