shift
в R
data.table
отлично подходит для временных рядов и временных файлов. Но столбцы списков не отстают так же, как и столбцы других элементов. В приведенном ниже коде gearLag
руководство/отставание gear
правильно, но gearsListLag
не отстает gearsList
, вместо этого shift
работает в пределах gearsList
, чтобы пропустить элемент на себе в той же строке.Отложенные списки в data.table R
dt <- data.table(mtcars)[,.(gear, carb, cyl)]
### Make col of lists
dt[,carbList:=list(list(unique(carb))), by=.(cyl, gear)]
### Now I want to lag/lead col of lists
dt[,.(carb, carbLag=shift(carb)
, carbList, carbListLag=shift(carbList, type="lead")), by=cyl]
cyl carb carbLag carbList carbListLag
1: 6 4 NA 4 NA
2: 6 4 4 4 NA
3: 6 1 4 1 NA <-- should be 4 here, not NA
4: 6 1 1 1 NA
5: 6 4 1 4 NA
6: 6 4 4 4 NA
7: 6 6 4 6 NA
8: 4 1 NA 1,2 2,NA
9: 4 2 1 1,2 2,NA
10: 4 2 2 1,2 2,NA
11: 4 1 2 1,2 2,NA
12: 4 2 1 1,2 2,NA
13: 4 1 2 1,2 2,NA
14: 4 1 1 1 NA <-- should be (1,2) here, not NA
15: 4 1 1 1,2 2,NA
16: 4 2 1 2 NA
17: 4 2 2 2 NA
18: 4 2 2 1,2 2,NA
19: 8 2 NA 2,4,3 4, 3,NA
20: 8 4 2 2,4,3 4, 3,NA
21: 8 3 4 2,4,3 4, 3,NA
22: 8 3 3 2,4,3 4, 3,NA
23: 8 3 3 2,4,3 4, 3,NA
Любые предложения о том, чтобы отставать от списков так же, как я отстаю от других элементов?
Похоже, что списки не поддерживаются 'shift'. Попробуйте 'shift (список (список (1,2), список (3,4))) # Ошибка Неподдерживаемый тип 'list''. Вы можете узнать из результатов, которые вы видите, что они повторяются по списку и применяют «shift» отдельно к каждому элементу, в соответствии с тем, что происходит при сдвиге (.SD) »(с каждым столбцом, который является элементом списка , сдвинутые отдельно). – Frank
, вы можете указать проблему на странице [github] (https://github.com/Rdatatable/data.table/issues) для более легкого способа справиться с этим. – MichaelChirico
Закрытие этого как дублирующего, так как [лучшее решение было недавно реализован] (https://github.com/Rdatatable/data.table/issues/1595). – Arun