gpt4 book ai didi

R中的滚动窗口模式更新

转载 作者:行者123 更新时间:2023-12-04 11:20:47 24 4
gpt4 key购买 nike

我想在矩阵上应用滚动窗口模式更新。假设我有一个零和一的矩阵,如下所示:

mat <- matrix(c(0,1,1,0,1,1,0,0,1,1,1,0,1,0,0,0),nrow=4)

0 1 1 1
1 1 1 0
1 0 1 0
0 0 0 0

我想一次扫描矩阵的每一行 2 个值,并根据这组规则创建一个标签矩阵:

0   0   - then label as A
0 1 - then label as B
1 0 - then label as B
1 1 - then label as C

上述矩阵的期望输出是:(出现 NA 值是因为第一个值之前没有值)

NA  B   C   C
NA C C B
NA B B B
NA A A A

我正在尝试在 R 中实现它。有没有办法使用其中一种应用方法来做到这一点?或者是否有一种快速的方法将此数据存储为 data.frame 并使用 dplyrdata.table 等包进行处理?目前,我将其作为 for 循环处理(当然,这非常非常慢)。

最佳答案

这里的滚动操作作用于成对组合,所以你可以定义函数:

f <- function(x,y) LETTERS[1:3][x+y+1L]

然后将其应用于适当的对:

nc  <- ncol(m)
res <- matrix(,length(m)/nc,nc)

res[,-1] <- f(m[,-nc], m[,-1])

# [,1] [,2] [,3] [,4]
# [1,] NA "B" "C" "C"
# [2,] NA "C" "C" "B"
# [3,] NA "B" "B" "B"
# [4,] NA "A" "A" "A"

关于R中的滚动窗口模式更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31932738/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com