добавить столбец с данными в строках перед & amp; после условия

Чистое использование list(mydict):

>>> mydict = {'one': 1, 'two': 2, 'three': 3, 'four': 4}
>>> for k in list(mydict):
...     if k == 'three':
...         del mydict[k]
... 
>>> mydict
{'four': 4, 'two': 2, 'one': 1}

Это соответствует параллельной структуре списков:

>>> mylist = ['one', 'two', 'three', 'four']
>>> for k in list(mylist):                            # or mylist[:]
...     if k == 'three':
...         mylist.remove(k)
... 
>>> mylist
['one', 'two', 'four']

Оба работают в python2 и python3.

0
задан Jeppe Olsen 16 January 2019 в 10:02
поделиться

1 ответ

Вот еще одна альтернатива, использующая shift

val <- 5L
DT[, xx := as.integer(
        Reduce(`|`, c(shift(y==val, 0L:2L, fill=FALSE), shift(y==val, 1L:2L, FALSE, "lead")))
    ),
    by=.(grp)]
DT

Включая комментарий Jaap, используя data.table version> = 1.12.0, код сокращается до вывода

DT[, xx := +(Reduce(`|`, shift(y==v, -2L:2L, FALSE))), by=grp]

:

    grp  y exclude xx
 1:   a  1       0  1
 2:   a  5       0  1
 3:   a  3       0  1
 4:   a  4       1  1
 5:   a  5       0  1
 6:   a  7       1  1
 7:   a  8       0  1
 8:   a  9       0  0
 9:   a 10       0  0
10:   b  1       0  0
11:   b  2       0  0
12:   b  3       0  1
13:   b  4       1  1
14:   b  5       0  1
15:   b  6       1  1
16:   b  7       1  1
17:   b  8       0  0
18:   b  9       0  0
19:   b 10       0  0
20:   c  5       1  1
21:   d  1       0  0
    grp  y exclude xx
0
ответ дан chinsoon12 16 January 2019 в 10:02
поделиться
Другие вопросы по тегам:

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