Получение матрицы ковариации из набора данных, включающего нечисловые переменные в данных.таблица

#r #lapply #numeric

Вопрос:

Данные:

 library(data.table)
df <- fread(
    "A   B   D  E  iso   year   
     1   A   1  NA ECU   2009   
     2   B   2  0  ECU   2009   
     3   D   3  0  BRA   2011   
     4   E   4  0  BRA   2011   
     5   D   7  NA ECU   2008   
     6   E   1  0  ECU   2008   
     7   A   3  2  BRA   2012   
     8   A   4  NA BRA   2012",
  header = TRUE
)
 

Раньше я достигал этого, бегая:

 df_cov <- df[,lapply(Filter(is.numeric,.SD),cov, na.rm=TRUE)]
 

Но с R 4.x это больше не похоже на это. Что-то изменилось и в синтаксисе data.table?

Комментарии:

1. Этот код никогда не вычислял ковариационную матрицу. cov у него нет na.rm аргументов. Ваш код работает, если вы замените cov его на var .

2. Ааа.. Вы абсолютно правы, я действительно изменил это. Я не считал, что это может иметь значение. Так что, если мне нужна ковариационная матрица вместо дисперсии?

3. Затем вам нужно изменить свой код. cov нужна матрица в качестве входных данных. Подмножество df в соответствующие столбцы и передайте результат cov . Что-то вроде cov(na.omit(df[, Filter(is.numeric, .SD)])) .

4. Или cov(df[, Filter(is.numeric, .SD)], use = "pairwise.complete.obs") .