Вопрос:

Вычисление различий между значениями в столбцах data.table (с .SD) в R

r data.table

113 просмотра

1 ответ

556 Репутация автора

Мне нужно рассчитать относительные изменения значений столбца относительно N-го значения. Смотрите код ниже:

library(data.table)
df <- data.table(K=c(rep(1,5),rep(2,5)), X=(1:10)^2, Y=2^(1:10))

df[, d.X1:= X - shift(X,fill=0,type="lag"),keyby=K]  # WORKS
df[, d.X0:= X - .SD[3,X],keyby=K] # WORKS

cols <- 2:3; 
cols.d1 = paste0("d1.", names(df)[cols]);  cols.d0 = paste0("d0.", names(df)[cols])
df[, (cols.d1) := .SD - shift(.SD,fill=0,type="lag"),keyby=K, .SDcols=cols]  # WORKS
df[, (cols.d0) := .SD - .SD[3,names(.SD)[cols]], keyby=K, .SDcols=cols]  # <=== DOESN'T WORK

Как показано в приведенном выше коде:
- Я знаю, как это сделать, используя shift()- чтобы вычислить разницу между значениями смежных строк, для одного и нескольких столбцов, используя .SD /.SDcols.
- Я также знаю, как рассчитать различия по N-му элементу для одного столбца (N = 3 в этом примере).

Вот вывод

    K   X    Y d.X1 d.X0 d.X d.Y
 1: 1   1    2    1   -8   1   2
 2: 1   4    4    3   -5   3   2
 3: 1   9    8    5    0   5   4
 4: 1  16   16    7    7   7   8
 5: 1  25   32    9   16   9  16
 6: 2  36   64   36  -28  36  64
 7: 2  49  128   13  -15  13  64
 8: 2  64  256   15    0  15 128
 9: 2  81  512   17   17  17 256
10: 2 100 1024   19   36  19 512

Однако я не могу понять, как вычислить различия по N-му элементу для нескольких столбцов (см. Последнюю строку в приведенном выше коде). Пожалуйста помоги

Автор: IVIM Источник Размещён: 08.11.2017 11:29

Ответы (1)


0 плюса

556 Репутация автора

Решение

Благодаря комментарию Фрэнка выше:

Обе

 df[, (cols.d0) := lapply(.SD, function(z) z - z[3]) , keyby=K, .SDcols=cols] 

а также

df[, (cols.d0) := .SD-.SD[rep(3,.N)] , keyby=K, .SDcols=cols] 

работай.

Автор: IVIM Размещён: 21.05.2018 12:44
Вопросы из категории :
32x32