r - 如何在 R 中生成向量的所有可能的连续 n 元组?

如何在 R 中生成向量的所有可能的连续 n 元组?

# Input 
x <- c('a', 'b', 'c', 'b')
n = 2
# Output 
list(c('a', 'b'), c('b', 'c'), c('c', 'b')) # a list equal to this list

最佳答案

我们可以删除第一个和最后一个元素,并通过使用 Map 遍历相应的元素来连接起来

Map(c, x[-length(x)], x[-1])
$a
[1] "a" "b"

$b
[1] "b" "c"

$c
[1] "c" "b"

或者cbind到一个matrix并用asplit按行拆分

asplit(cbind(x[-length(x)], x[-1]), 1)
[[1]]
[1] "a" "b"

[[2]]
[1] "b" "c"

[[3]]
[1] "c" "b"

如果 n 值可以大于 2,我们也可以使用 shift

library(data.table)
Filter(\(x) all(complete.cases(x)), 
  data.table::transpose(shift(x, seq_len(n)-1, type = 'lead')))
[[1]]
[1] "a" "b"

[[2]]
[1] "b" "c"

[[3]]
[1] "c" "b"

https://stackoverflow.com/questions/73262544/

相关文章:

c - gcc中的 '-Wextra'和 '-pedantic'有什么区别?

caching - Aerospike 为特定字段设置到期日期

c++ - 创建其他对象时如何使用同一个对象实例?

r - 选择仅连续运行特定值的组

python - 如何按列导出数据框以分隔 csv 文件?以及如何将不同数据框中的列附加到分离的 c

python - 如果数字在 Pandas 的指定范围内,如何返回值

delphi - 组件是特定类 - 在 BPL 结构中不起作用

c++ - 子类调用父复制分配而不是移动分配?

kotlin - 如何将 `throw` 放入辅助函数中但仍然具有空安全性?

r - 如何在R中自动使函数的结果成为同一函数的参数