我有一个数据框" df"像这样,用#34; nest分组。"
nest laid stage
1 NA 2
1 5 4
1 -10 NA
2 NA 1
2 3 1
2 -8 NA
我想创造一个条件,以便如果"奠定"是> 0,"阶段"在上次访问时该巢的设置为0.如果"奠定了"不大于0,我想在#34; stage"。
中没有变化期望的结果:
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 :(得分: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