2017-03-09 61 views
1

這裏我的例子data.frame:組列,並返回1

df = read.table(text = 'Value 
    1 
    1 
    0 
    1 
    0 
    0 
    0 
    0 
    0 
    0 
    1 
    1 
    1 
    0 
    1 
    1 
    0 
    0 
    0 
    0', header = TRUE) 

我需要劃分爲4塊列,並且如果存在內的至少一個1我需要用1s返回一個data.frame。

這裏我預期的結果:

Result 
1 
1 
1 

或者也返回與1和0,這裏0打印的塊,沒有的1的data.frame:

Result 
1 
0 
1 
1 
0 

回答

1

一個簡單的量化方法能被轉換成4行矩陣然後運行一個colSums(這當然假設你的數據長度可以被4除)

as.integer(colSums(matrix(df$Value, 4)) > 0) 
# [1] 1 0 1 1 0 

或者使用matrixStats包

matrixStats::colMaxs(matrix(df$Value, 4)) 
# [1] 1 0 1 1 0 
+1

非常感謝您的幫助 – aaaaa

0

隨着data.table

library(data.table) 
setDT(df)[, grp := as.integer(gl(.N, 4, .N))][, +(any(Value==1)) , grp]$V1 
#[1] 1 0 1 1 0 

或用rowsumbase R

+(rowsum(df$Value, gl(20, 4, 20))>0) 

或用tidyverse

library(dplyr) 
df %>% 
    group_by(grp = gl(n(), 4, n())) %>% 
    summarise(Value = max(Value)) 
0

下面是一個使用矩陣乘法來計算1個值的總和的基R法,然後使用sign到值大於1轉換爲0。

sign(rep(1, 4) %*% matrix(df$Value, 4)) 
    [,1] [,2] [,3] [,4] [,5] 
[1,] 1 0 1 1 0 

注意這假定矢量由0和1組成。如果有負數,它可能會失敗。