Работа с фреймами данных с помощью условных операторов - PullRequest
0 голосов
/ 27 апреля 2020

После двух предыдущих вопросов:

удаление первых 3 строк группы с условным оператором в r

Назначение NA для строк с условным оператором в r

У меня проблемы с кодом. Если вместо удаления строк я хочу назначить NA каждому событию, которое имеет в своей первой строке значение больше 2. Поэтому, если событие имеет в своей первой строке значение больше 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,10,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 ).

Пожалуйста, дайте мне знать, если у вас есть идея, и заранее спасибо за ваше время.

1 Ответ

3 голосов
/ 27 апреля 2020

Вот трубка 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

, так как они были несовместимы с отображаемым кадром (и дисплей сделал больше чувство).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...