使用条件语句处理数据帧

问题描述 投票:0回答:1

以下两个问题之后:

removing the first 3 rows of a group with conditional statement in r

Assigning NAs to rows with conditional statement in r

我的代码遇到了一些麻烦。如果不是要删除行,而是要给其第一行中的值大于2的每个事件分配NA,因此,如果事件在其第一行中的值大于2,则希望将NA分配给该事件行,以及该事件的后两行。如果事件没有更多行,只需将NA分配给事件具有的行。

这里是一个示例,其中有一列我想要的欲望输出。

Event<- c(1,1,1,1,1,2,2,2,2,3,3,4,5,6,6,6,7,7,7,7) 
Value<- c(1,0,8,0,8,8,7,1,10,4,0,1,10,3,0,0,NA,NA,5,0) 
Desire_output<- c(1,0,8,0,8,NA, NA, NA,0,NA,NA,1,NA,NA,NA,NA,NA,NA,5,0)
AAA<- data.frame(Event, Value, Desire_output) 
     Event Value    Desire_output
1      1     1             1
2      1     0             0
3      1     8             8
4      1     0             0
5      1     8             8
6      2     8            NA
7      2     7            NA
8      2     1            NA
9      2    10            10
10     3     4            NA
11     3     0            NA
12     4     1             1
13     5    10            NA
14     6     3            NA
15     6     0            NA
16     6     0            NA
17     7    NA            NA
18     7    NA            NA
19     7     5             5
20     7     0             0

注意:如果事件以NA开头,则不执行任何操作(如事件7)。

请让我知道您是否有想法,并在此先感谢您的宝贵时间。

r dplyr conditional-statements tidyverse na
1个回答
0
投票
这里是dplyr管道,可用于此操作:

library(dplyr) AAA %>% group_by(Event) %>% mutate( bad = row_number() == 1 & !is.na(Value) & Value >= 2, bad = bad | lag(bad, default = FALSE) | lag(bad, 2, default = FALSE), bad = bad | is.na(Value), Value2 = if_else(bad, NA_real_, Value) ) %>% ungroup() # # A tibble: 20 x 5 # Event Value Desire_output bad Value2 # <dbl> <dbl> <dbl> <lgl> <dbl> # 1 1 1 1 FALSE 1 # 2 1 0 0 FALSE 0 # 3 1 8 8 FALSE 8 # 4 1 0 0 FALSE 0 # 5 1 8 8 FALSE 8 # 6 2 8 NA TRUE NA # 7 2 7 NA TRUE NA # 8 2 1 NA TRUE NA # 9 2 10 10 FALSE 10 # 10 3 4 NA TRUE NA # 11 3 0 NA TRUE NA # 12 4 1 1 FALSE 1 # 13 5 10 NA TRUE NA # 14 6 3 NA TRUE NA # 15 6 0 NA TRUE NA # 16 6 0 NA TRUE NA # 17 7 NA NA TRUE NA # 18 7 NA NA TRUE NA # 19 7 5 5 FALSE 5 # 20 7 0 0 FALSE 0

我更新了数据

AAA$Desire_output[9] <- 10

因为它与您显示的框架不一致(并且显示更有意义)。
© www.soinside.com 2019 - 2024. All rights reserved.