以下两个问题如下:
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)。
请让我知道您是否有个主意,并感谢您的宝贵时间。
答案 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
因为它与您显示的框架不一致(并且显示更加有意义)。