Проблемы с матрицей корреляции: Невозможно преобразовать переменные в числовые значения

Вопрос или проблема

ВОПРОСЫ:

  1. Не могли бы вы сказать, как можно преобразовать переменные типа int и factor в числовые переменные в R?

  2. Не могли бы вы объяснить, почему as.numeric(as.character(df$Account_Global_Region_Cascading_Band)) не работает?

КОНТЕКСТ:
Я преобразовал все свои столбцы CSV в числа. Я хочу запустить корреляционную матрицу с помощью этого учебника STHDA. Сообщение об ошибке ниже мешает этому. Все переменные фактически являются числами, хотя их типы не обязательно таковы.

ОШИБКА:

> res <- cor(sql_inputs_formatted)
Ошибка в cor(sql_inputs_formatted) : 'x' должен быть числовым
 $ Account_Global_Region_Cascading_Band: int  3 3 2 2 2 2
 $ Account_Annual_Revenue_Cascading    : num  5.6e+08 0.0 0.0 0.0 6.1e+06 5.7e+06
 $ Account_Annual_Revenue              : int  1000 50 50 50 50 50
 $ Account_NAICS_Code_Cascading        : int  813000 334000 517919 0 0 0
 $ Account_Employee_Count_Cascading    : Factor w/ 256 levels "10","100","1000",..: 80 23 66 6 88 47
 $ Account_Employee_Count_Band         : int  5000 10001 10001 10001 100 100
 $ Account_Buyer_Industry_Cascading.1  : int  0 4 1 6 6 0
 $ Active_Nodes                        : int  0 10 0 0 0 0
 $ Active_Node_Bands                   : int  1 1 1 1 1 1
 $ Account_Fit_Score                   : int  14 10 10 10 16 16
 $ Account_Fit_Score_Bands             : int  3 2 2 2 4 4
 $ Predictive_Engagement_Score_Bands   : int  2 2 2 1 2 4
 $ Engaged_People                      : int  3 6 11 1 4 0
 $ Engagement_Minutes_3_mo             : int  4 747 121 10 312 0
 $ Engagement_Minutes_7.days           : int  0 86 0 0 19 0
 $ Engagio_Status_Bands                : int  1 3 3 3 3 4
 $ DF_Total_Funding                    : num  0 0 0 0 0 0
 $ Number_of_People                    : int  8 6 14 1 3 1
 $ Fortune_Rank                        : int  0 0 0 0 0 0
 $ Expected_Node_Count_Band            : int  0 0 0 0 0 0
 $ Contact_Job_Level_Band              : int  2 2 1 2 1 2
 $ Contact_Job_Department_Band         : int  6 6 3 6 6 6
 $ Contact_Sphere_Band                 : int  4 2 1 1 1 4
 $ Bizible_Touchpoint_Count            : int  1 6 1 1 1 0
 $ Bizible_Touchpont_Band              : int  2 6 2 2 2 2
 $ Lead_Source_Type_Band               : int  0 0 1 1 1 0
 $ Person.Score                        : int  90 260 35 35 30 20
 $ Person_Score_Band                   : int  4 6 2 2 2 1
 $ Behavior.Score                      : int  40 15 0 0 0 0
 $ Behavior.Score.Band                 : int  2 1 1 1 1 1
 $ Demographic.Score                   : int  25 225 20 20 20 10
 $ Demographic_Score_Band              : int  1 6 1 1 1 1
 $ SQL                                 : int  1 1 1 1 1 1
as.numeric(as.character(sql_inputs_formatted$Account_Global_Region_Cascading_Band))
as.numeric(as.character(sql_inputs_formatted$Account_Annual_Revenue_Cascading))
as.numeric(as.character(sql_inputs_formatted$Account_Annual_Revenue))
as.numeric(as.character(sql_inputs_formatted$Account_NAICS_Code_Cascading))
as.numeric(as.character(sql_inputs_formatted$Account_Employee_Count_Cascading))
as.numeric(as.character(sql_inputs_formatted$Account_Employee_Count_Band))
as.numeric(as.character(sql_inputs_formatted$Account_Buyer_Industry_Cascading.1))
as.numeric(as.character(sql_inputs_formatted$Active_Nodes))
as.numeric(as.character(sql_inputs_formatted$Active_Node_Bands))
as.numeric(as.character(sql_inputs_formatted$Account_Fit_Score))
as.numeric(as.character(sql_inputs_formatted$Account_Fit_Score_Bands))
as.numeric(as.character(sql_inputs_formatted$Predictive_Engagement_Score_Bands))
as.numeric(as.character(sql_inputs_formatted$Engaged_People))
as.numeric(as.character(sql_inputs_formatted$Engagement_Minutes_3_mo))
as.numeric(as.character(sql_inputs_formatted$Engagement_Minutes_7.days))
as.numeric(as.character(sql_inputs_formatted$Engagio_Status_Bands))
as.numeric(as.character(sql_inputs_formatted$DF_Total_Funding))
as.numeric(as.character(sql_inputs_formatted$Number_of_People))
as.numeric(as.character(sql_inputs_formatted$Fortune_Rank))
as.numeric(as.character(sql_inputs_formatted$Expected_Node_Count_Band))
as.numeric(as.character(sql_inputs_formatted$Contact_Job_Level_Band))
as.numeric(as.character(sql_inputs_formatted$Contact_Job_Department_Band))
as.numeric(as.character(sql_inputs_formatted$Contact_Sphere_Band))
as.numeric(as.character(sql_inputs_formatted$Bizible_Touchpoint_Count))
as.numeric(as.character(sql_inputs_formatted$Lead_Source_Type_Band))
as.numeric(as.character(sql_inputs_formatted$Person.Score))
as.numeric(as.character(sql_inputs_formatted$Behavior.Score))
as.numeric(as.character(sql_inputs_formatted$Behavior.Score.Band))
as.numeric(as.character(sql_inputs_formatted$Demographic.Score))
as.numeric(as.character(sql_inputs_formatted$Demographic_Score_Band))
as.numeric(as.character(sql_inputs_formatted$SQL))

ПРИЛОЖЕНИЕ:
введите описание изображения здесь

Всего наилучшего,
Эндрю

as.matrix(sql_inputs_formatted) должно работать.

Ответ или решение

Проблемы с корреляционной матрицей: Невозможно преобразовать переменные в числовые

Привет, Андрей!

Ваш вопрос о преобразовании переменных в числовой формат в R довольно распространенный, особенно когда речь идет о подготовке данных для анализа, такого как построение корреляционной матрицы. Давайте разберемся с вашими вопросами подробно.

1. Как преобразовать переменные целого типа и факторы в числовые в R?

Для начала, необходимо понимать, что в R факторы представляют собой категориальные переменные, которые могут отображать числовые значения, но фактически не являются числовыми. Чтобы выполнить преобразование таких переменных в числовые, вам необходимо выполнить несколько шагов:

  • Преобразование фактора в числовой тип:

    Если у вас есть фактор (например, Account_Employee_Count_Cascading), вы можете использовать следующий код для преобразования в числовой тип:

    sql_inputs_formatted$Account_Employee_Count_Cascading <- as.numeric(as.character(sql_inputs_formatted$Account_Employee_Count_Cascading))

    Важный момент: сначала преобразуйте фактор в символ (строку) с помощью as.character(), а затем в число с помощью as.numeric().

  • Преобразование целых чисел:

    Если переменная уже имеет тип int, как в случае с Account_NAICS_Code_Cascading, её можно оставить как есть, так как она уже числовая. Однако, если необходимо, ее также можно явно преобразовать с использованием:

    sql_inputs_formatted$Account_NAICS_Code_Cascading <- as.numeric(sql_inputs_formatted$Account_NAICS_Code_Cascading)

На всякий случай, убедитесь, что в ваших данных отсутствуют строки, которые могут вызвать ошибки преобразования, например, NA или недопустимые данные.

2. Почему as.numeric(as.character(df$Account_Global_Region_Cascading_Band)) не работает?

Ошибка при выполнении команды as.numeric(as.character(df$Account_Global_Region_Cascading_Band)) может возникать по нескольким причинам:

  • Неверные входные данные: Если ваш фактор содержит не только числовые значения, но и текстовые строки, то при попытке преобразования символов в числовые значения, R вернет NA для строк, которые не могут быть интерпретированы как числа.

  • Неправильный тип данных: Если переменная уже является числом (например, тип int или num), использование as.character() и as.numeric() не требуется и может привести к потерям данных или ошибкам. Это связано с тем, что факторы ведут себя иначе. Прямое преобразование из фактора в число без предварительного преобразования в символ может вызвать ошибки.

Заключение

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

Также рекомендуем создать многоуровневую валидацию данных после каждого преобразования, чтобы исключить возможность появления NA.

Если у вас возникли дополнительные вопросы или понадобятся дальнейшие разъяснения, не стесняйтесь обращаться. Удачи в вашем анализе данных!

С уважением,
[Ваше имя]

Оцените материал
Добавить комментарий

Капча загружается...