Векторизованное решение для использования предыдущего значения в столбце при определенных условиях.

В моем случае я использовал это:

var query = "select * from table where Id IN @Ids";
var result = conn.Query<MyEntity>(query, new { Ids = ids });

моя переменная «ids» во второй строке является IEnumerable из строк, также они могут быть целыми числами, которые я предполагаю.

0
задан Rincewind 18 January 2019 в 07:08
поделиться

2 ответа

Мы можем использовать lag и fill из tidyverse

library(tidyverse)

df %>%
 mutate(b1 = replace(a, a < lag(a), NA)) %>%
 fill(b1)


#      a     b    b1
#  <dbl> <dbl> <dbl>
#1     1     1     1
#2     2     2     2
#3     3     3     3
#4     4     4     4
#5     3     4     4
#6     2     4     4
#7     5     5     5
#8     6     6     6
#9     9     9     9

. Логика заключается в том, что мы заменяем значения в a на NA, где предыдущее значение больше следующего а затем используйте fill для замены этих NA на последнее значение, отличное от NA.

0
ответ дан Ronak Shah 18 January 2019 в 07:08
поделиться

Использование cummax() из базы R:

df[["b1"]] <- cummax(df[["a"]])

> df
  a b b1
1 1 1  1
2 2 2  2
3 3 3  3
4 4 4  4
5 3 4  4
6 2 4  4
7 5 5  5
8 6 6  6
9 9 9  9

Использование более синтаксиса dplyr:

df %>% 
  mutate(b1 = cummax(a))
0
ответ дан sindri_baldur 18 January 2019 в 07:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: