r нижний индекс в data.table при группировании по двум переменным - PullRequest
0 голосов
/ 19 октября 2019

У меня есть такая таблица данных:

dt_to_analyse
         Name_of varia years value
     1:       8    17  2018  0.51
     2:       5    17  2018  0.60
     3:       1    17  2018  0.55
     4:       3    17  2017  0.89
     5:       7    17  2017  0.57
     6:       4    17  2016  0.56
     7:       9    17  2016  0.55
     8:       6    17  2016  1.45
     9:       4    17  2015  0.53
    10:       9    17  2015  0.62
    11:       7    17  2015  0.66
    12:       4    17  2014  0.62
    13:       5    17  2014  0.82
    14:       6    17  2014  1.44
    15:       4    17  2013  0.52
    16:       5    17  2013  0.66
    17:       6    17  2013  0.81
    18:       3    18  2018  0.24
    19:       7    18  2018  0.18
    20:       4    18  2017  0.15
    21:       9    18  2017  0.25
    22:       6    18  2017  0.22
    23:       8    18  2016  0.39
    24:       5    18  2016  0.50
    25:       1    18  2016  0.19
    26:       8    18  2015  0.28
    27:       5    18  2015  0.32
    28:       6    18  2015  0.18
    29:       8    18  2014  0.35
    30:       3    18  2014  0.64
    31:       1    18  2014  0.12
    32:       8    18  2013  0.31
    33:       3    18  2013  0.36
    34:       1    18  2013  0.16
    35:       4    19  2018  0.20
    36:       9    19  2018  0.15
    37:       6    19  2018  0.19
    38:       8    19  2017  0.30
    39:       5    19  2017  0.63
    40:       1    19  2017  0.31
    41:       3    19  2016  0.34
    42:       7    19  2016  0.18
    43:       2    19  2016  0.14
    44:       3    19  2015  0.41
    45:       2    19  2015  0.12
    46:       1    19  2015  0.26
    47:       9    19  2014  0.21
    48:       7    19  2014  0.23
    49:       2    19  2014  0.14
    50:       9    19  2013  0.16
    51:       7    19  2013  0.30

Я хочу использовать функцию для этих данных:

gmch_function <-function(long)
{
    y <- long$value
    x <- long$years
    p_value_coef <- 1-summary(lm(y~x))$coefficients[2,4]
    return (p_value_coef)
}

Когда я группирую ее по одному столбцу, у нее нет проблем

dt_to_analyse[,data.frame(val=gmch_function(.SD)),by=list(varia)]

Когда я группирую его по двум столбцам:

dt_to_analyse[,data.frame(val=gmch_function(.SD)),by=list(Name_of,varia)]

, он говорит мне «Подпись вне границ». Как я могу решить проблему?

Я пыталсяВозможные варианты - by = c ("Name_of", "varia"), например

1 Ответ

1 голос
/ 19 октября 2019

Проблема в том, что нет коэффициентов для извлечения, когда есть только одна запись. То есть, если y = 1 и x= 2, код summary(lm(y~x))$coefficients[2, 4] выдаст ошибку. Вместо этого вы можете выполнить проверку.

gmch_function2 <-function(value, years)
{
  if (length(value) ==1){
    return(NA_real_)
  } else {
    return(1-summary(lm(value~years))$coefficients[2,4]) #p_value_coeff
  }
}

dt[, .(val = gmch_function2(value, years)), by = .(Name_of, varia)]

Обратите внимание, что функция OP была изменена для приема векторов.

...