r - R 中滑动窗口数据框中最常见的值

标签 r dataframe sliding-window

我有以下数据框(df):

    A                    B           T    Required col (window = 3)
1   1                    0           1     
2   3                    0           3   
3   4                    0           4        
4   2                    1           1        4
5   6                    0           0        2
6   4                    1           1        0
7   7                    1           1        1
8   8                    1           1        1
9   1                    0           0        1

我想添加所需的列,如下所示: 在当前行中插入 AB 的上一行值。 如果在最后 3(window)行中,大多数情况下 A 列的内容等于 T 列- 选择A,否则 - B。 (可以有更多列 - 因此将选择次数最多等于 T 的列的内容)。 对于大数据表来说,最有效的方法是什么。

最佳答案

我将名为 T 的列更改为 TC,以避免与作为 TRUE 缩写的 T 混淆>

library(tidyverse)
library(data.table)

df[, newcol := {
  equal <- A == TC
  map(1:.N, ~ if(.x <= 3) NA
              else if(sum(equal[.x - 1:3]) > 3/2) A[.x - 1] 
              else B[.x - 1])
}]
df

#    N A B TC newcol
# 1: 1 1 0  1     NA
# 2: 2 3 0  3     NA
# 3: 3 4 0  4     NA
# 4: 4 2 1  1      4
# 5: 5 6 0  0      2
# 6: 6 4 1  1      0
# 7: 7 7 1  1      1
# 8: 8 8 1  1      1
# 9: 9 1 0  0      1

这也有效,但不太清楚,而且效率可能较低

df[, newcol := shift(A == TC, 1:3) %>% 
                  pmap_lgl(~sum(...) > 3/2) %>% 
                  ifelse(shift(A), shift(B))]

数据:

df <- fread("
N    A                    B           TC   
1   1                    0           1     
2   3                    0           3   
3   4                    0           4        
4   2                    1           1        
5   6                    0           0        
6   4                    1           1        
7   7                    1           1        
8   8                    1           1        
9   1                    0           0        
")

关于r - R 中滑动窗口数据框中最常见的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50531114/

相关文章:

php - 'Rscript' 不是内部或外部命令,也不是可运行的程序或批处理文件

r - 使用 R5 生成器对象显示类方法的定义

sql - 用于滑动窗口聚合的 Bigquery SQL

arrays - 计算离散卷积的 "product"的有效方法

r - 图像处理 : Average grayscale images

r - 如何在R中的列上滚动求和?

python - 无法使用 Pandas 在 Python 中将 0 替换为 nan

r - 如何创建一个数据框来收集 R 中具有多个索引的 for 循环的结果?

Python/Pandas传输dataframe的格式

python - 在 Python 中快速对图像运行滑动窗口方法的技巧