使用条件语句处理数据框

时间:2020-04-27 19:37:22

标签: r dplyr conditional-statements tidyverse na

以下两个问题如下:

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分配给事件具有的行。

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

[CoreBluetooth] WARNING: <CBMutableCharacteristic: 0x283d5e4c0 UUID = 
FF68B080-7028-11EA-BC55-0242AC130003, Value = {length = 20, bytes = 
0xd0af20d182d0b5d0b1d18f20d0b2d0b8d0b6d183}, Properties = 0x4, 
Permissions = 0x2, Descriptors = (null), SubscribedCentrals = (
)> is not a valid characteristic for peripheral <CBPeripheral: 
0x282758000, identifier = 845358A5-0FA5-3009-8939-02B6FA6A43AF, name = 
iPhone, state = connected>
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,10,NA,NA,1,NA,NA,NA,NA,NA,NA,5,0)
AAA<- data.frame(Event, Value, Desire_output) 

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

请让我知道您是否有个主意,并感谢您的宝贵时间。

1 个答案:

答案 0 :(得分:2)

下面是一个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

因为它与您显示的框架不一致(并且显示更加有意义)。