У меня есть несколько больших наборов данных, для которых я хотел бы получить корреляции с одной конкретной переменной этого же набора данных.
Например, корреляция переменной A
с другими переменными в data.table.
- Из-за размера наборов данных я хочу использовать data.table.
- Эти наборы данных являются не только числовыми, но и категориальными.
- Поэтому я хотел бы иметь возможность применять различные методы корреляции в зависимости от класса переменной. Я бы предпочел использовать разные корреляции для категориальных переменных, то есть корреляцию ранга Спирмена.
Пример:
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
)
Я получаю числовые столбцы, используя:
numcols <- which(sapply(df, is.numeric))
Следующим шагом для числовых переменных должно быть что-то вроде:
dfcor <- df[, x := .(list(cor(.SD, use= "pairwise.complete.obs", method= "pearson"))), by = iso, .SDcols = numcols]
Это, однако, создает столбец x
с вектором корреляций вместо отдельных столбцов для корреляций:
c(1, 0.942908070944406, 0.365636212063565, NA, -0.970142500145332, 0.942908070944406, 1, 0.0509647191437626, NA, -0.845154254728517, 0.365636212063565, 0.0509647191437626, 1, NA, -0.502518907629606, NA, NA, NA, NA, NA, -0.970142500145332, -0.845154254728517, -0.502518907629606, NA, 1)
Кроме того, этот ответ дает мне только корреляции Пирсона, где это применимо. Однако я хотел бы использовать и ранг короля копья. Есть предложения?