從每個滑動窗口中的 1 次運行中獲取 1 的總數

用戶1490

我有一個數據集,其中:

df <- data.frame(row_id = c(100, 101, 102, 103, 104, 105, 106, 107, 108, 109),
         row_id2 = c(1000,2000,3000,4000,5000,6000,7000,8000,9000,10000),
         col1 = c(1,0,1,1,1,0,0,1,1,0),
         col2 = c(1,1,1,0,0,1,1,1,0,0),
         col3 = c(0,0,1,0,0,1,1,1,1,0),
         col4 = c(1,1,1,0,0,1,0,1,1,1),
         col5 = c(1,1,1,0,1,0,1,0,0,1))

我必須轉置表格,然後添加一個新列pos來為每一行分配一個col帶有數值前綴:

library(data.table)
df_tr<-transpose(df)
rownames(df_tr)<-colnames(df)
df_tr$pos<-c("NA","NA",1000,1156,4629,8208,10000)

|       |  V1    V2    V3   V4   V5   V6   V7   V8   V9   V10   pos|
|row_id |  100   101  102  103  104  105  106  107  108   109    NA|
|row_id2| 1000  2000  3000 4000 5000 6000 7000 8000 9000 10000   NA|
|col1   |    1     0    1    1    1    0    0    1    1     0  1000|
|col2   |    1     1    1    0    0    1    1    1    0     0  1156|
|col3   |    0     0    1    0    0    1    1    1    1     0  4629|
|col4   |    1     1    1    0    0    1    0    1    1     1  8208|
|col5   |    1     1    1    0    1    0    1    0    0     1 10000|

使用pos, 對於每一列的值,我想使用大小為 2000 的滑動窗口,一次滑動 1000,以從每個窗口中的 1 次運行中獲得 1 的總數。(我想排除獨立的 1)。窗口滑動將從 1000 開始,對應col1於 10000,對應於col5

我想創建一個單獨的表,其中第一列和第二列是row_id, row_id2,然後是與每個滑動窗口對應的列。

例如,前幾行的最終輸出將是:

|row_id |row_id2 |window1 |window2 |window3 |window4 |window5 |window6 |window7 |window8 |
| 100   |  1000  |   2    |   0    |   0    |  0     |   0    |  0     |  0     |   2    |
| 101   |  2000  |   0    |   0    |   0    |  0     |   0    |  0     |  0     |   2    |
| 102   |  3000  |   2    |   0    |   0    |  0     |   0    |  0     |  0     |   2    |
| 103   |  4000  |   0    |   0    |   0    |  0     |   0    |  0     |  0     |   0    |

任何幫助將不勝感激,謝謝!

布賴恩蒙哥馬利

我改成pos數字。
我還將 df_tr 轉換為 data.table 以使其更易於使用。
最終的答案仍然是一個data.frame。

df_tr$pos<-c(NA_real_,NA_real_,1000,1156,4629,8208,10000)

setDT(df_tr)
window_list <- vector('list')
for (i in 1:8) {
  window_list[[i]] <- 
    df_tr[!is.na(df_tr$pos) & df_tr$pos %between% c(1000 * i, 1000 * i + 2000), 
          sapply(.SD, \(x) {
            y <- rle(x)
            z <- y[['lengths']][y[['values']] == 1]
            sum(z[z > 1])
          }), .SDcols = patterns('V')]
}
ans <- cbind(df[, 1:2], do.call('cbind', window_list))
setnames(ans, as.character(1:8), paste0('window', 1:8))
ans <- `rownames<-`(ans, NULL)
ans
   row_id row_id2 window1 window2 window3 window4 window5 window6 window7
1     100    1000       2       0       0       0       0       0       0
2     101    2000       0       0       0       0       0       0       0
3     102    3000       2       0       0       0       0       0       0
4     103    4000       0       0       0       0       0       0       0
5     104    5000       0       0       0       0       0       0       0
6     105    6000       0       0       0       0       0       0       0
7     106    7000       0       0       0       0       0       0       0
8     107    8000       2       0       0       0       0       0       0
9     108    9000       0       0       0       0       0       0       0
10    109   10000       0       0       0       0       0       0       0
   window8
1        2
2        2
3        2
4        0
5        0
6        0
7        0
8        0
9        0
10       2

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我如何才能在可組合函數中運行我的邏輯代碼 1 次?

如何獲取Django中每種任務的總數?

如何從 [Any] 數組的集合中獲取所有可能值的總和

計算文件中每一行的總數

根據數據框中的多個因素匯總數據

Jtable 獲取選定行總是返回 -1

Numpy:如何以矢量化方式根據另一個數組的索引獲取整數數組切片的總和?

在滑動窗口的倒數第二個測試用例中獲取 TLE(使用隊列)

如果總頁數大於 1,如何顯示頁碼?

如何僅在while循環中運行動作1次

從 Pandas 中的兩個數組創建所有總和表

GitLab API - 獲取總代碼行數

從 n 個集合中找出等於 1 個數字之和的數字 x

我們如何從數據庫中只構建 1 個模式?

給定一個數字 p,打印 n 的值,其中 (1/1 + 1/2 + ... + 1/n) 的總和大於 p

只要總和小於 1,隨機數的累積總和(來自均勻分佈)的時間複雜度

如何從對像數組中獲取特定鍵值的總和

如何創建一個像 findSum([1,2,3,5], 5) 這樣的函數,第二個參數是數組元素的總和,並在 javascript 中返回這兩個元素?

在 google 腳本的電子郵件中獲取 1 行中的所有列數據

如何在MySql中獲取總行數和最新行的值?

javascript中從1到10的數字預測

通過flutter中的項目總數顯示每個列表項目的數量(計數)

獲取for循環中數字的總和

Numpy:從 1 行的二維數組中獲取一維數組

創建一個函數以在 R 中運行條件總和

帶索引的分數總和返回 1

嘗試獲得列表中每一行的總數,然後在最後將它們全部相加以獲得絕對總成本

Python:如何重複數據幀中從 1 到 n 的每個行組合?

每次運行 1 時獲取第一行和最後一行的名稱