Вопрос или проблема
ВОПРОСЫ:
-
Не могли бы вы сказать, как можно преобразовать переменные типа int и factor в числовые переменные в R?
-
Не могли бы вы объяснить, почему
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.
Если у вас возникли дополнительные вопросы или понадобятся дальнейшие разъяснения, не стесняйтесь обращаться. Удачи в вашем анализе данных!
С уважением,
[Ваше имя]