Индекс Джини в R

Я пытаюсь рассчитать индекс Джини для каждой строки в моей базе данных. Каждая строка - это клиент, а каждый столбец - месячная сессия. Поэтому мне нужно добавить столбец с индексом Джини по строкам для каждого клиента в течение 12 месяцев. Смотрите пример в приложении

Я нашел несколько примеров в Интернете и сделал это:

Gini_index <- apply(DT_file[,c('sessions_201607_pct','sessions_201608_pct', 'sessions_201609_pct','sessions_201610_pct','sessions_201611_pct','sessions_201612_pct','sessions_201701_pct','sessions_201702_pct','sessions_201703_pct','sessions_201704_pct','sessions_201705_pct','sessions_201706_pct')], 1, gini)

Однако я получаю следующую ошибку:

Ошибка в match.fun(FUN): объект 'gini' не найден

Я установил Ineq и Reldist (и библиотеки), поэтому я не знаю, почему это не работает.

1 ответ

Попробуйте сделать это, чтобы получить коэффициент Джини по столбцам:

library(ineq)

coeff= NULL
for (i in colnames(your_data[,-1])){
  coeff= c(coeff,round(ineq(your_data[,i],type = 'Gini'),4))
}

data_coeff = data.frame(cbind(coeff,colnames(your_data[,-1])))
colnames(data_coeff) = c("Coeff","Colnames")

Если вы хотите это для каждой строки, попробуйте это:

your_new_data = as.data.frame(t(your_data[,-1]), row.names =T)

colnames(your_new_data) = your_data[,1]

ind = NULL
for (i in colnames(your_new_data)){
  ind = c(ind,round(ineq(your_new_data[,i],type = 'Gini'),4))
}

data_coeff= data.frame(cbind(ind,colnames(your_new_data)))
colnames(data_coeff) = c("Coeff","customer")

Наконец, вы добавляете свои коэффициенты в конце вашего data_frame с объединением, например:

your_data_final = merge(your_data,data_coeff, by = "customer" )
Другие вопросы по тегам