2017-09-09 29 views
0

我有一個像這樣的數據框「df」,按「巢」分組。有條件地設置上一行的值,在組內

nest laid stage 
    1 NA  2 
    1  5  4 
    1 -10  NA 
    2 NA  1 
    2  3  1 
    2 -8  NA 

我想打一個條件,因此如果「奠定」> 0,則是窩在上次訪問設置爲0,如果「打下」的「舞臺」不大於0,我「階段」中不要改變。

期望的結果:

nest laid stage 
    1 NA  0 
    1  5  4 
    1 -10  NA 
    2 NA  0 
    2  3  1 
    2 -8  NA 

我試過不同版本的代碼如下(dplyr和tidyr),與各種錯誤:

df1 <- df %>% 
    group_by(nest) %>% 
    mutate(stage, if(laid > 0){stage = 0}) %>% 
    fill(stage, .direction = "up") 

我已經過類似的問題,但他們全部使用ifelse。任何提示都非常感謝!

+0

我需要改變不侷限於組的第一排,我要爲第二特定巢相同條件的變化,第三等階段 – Emily

回答

4

可以使用if_else(或ifelse,如果您不能確定列的數據類型),這是if/else向量化版本;要檢查下laid值,使用lead

df %>% 
    group_by(nest) %>% 
    mutate(stage = if_else(lead(laid) > 0, 0L, stage)) 

# A tibble: 6 x 3 
# Groups: nest [2] 
# nest laid stage 
# <int> <int> <int> 
#1  1 NA  0 
#2  1  5  4 
#3  1 -10 NA 
#4  2 NA  0 
#5  2  3  1 
#6  2 -8 NA 
+1

美麗, 謝謝!!提示他人 - 我有錯誤的Psidom的代碼,但從數字更改爲整數固定它 – Emily

+3

@Emily請考慮接受這個答案(複選標記),如果它幫助你。它讓社區知道答案適用於您的問題。 – CPak