【问题标题】:Rolling window pattern update in RR中的滚动窗口模式更新
【发布时间】:2015-11-03 03:29:32
【问题描述】:

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

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 循环处理(当然,这非常慢)。

【问题讨论】:

  • 感谢@Frank 的评论。今后将牢记这一点。

标签: r matrix dplyr apply


【解决方案1】:

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

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" 

【讨论】:

    猜你喜欢
    • 2019-06-26
    • 1970-01-01
    • 2014-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-25
    • 1970-01-01
    相关资源
    最近更新 更多