Преобразовать данные с множественным выбором в числовые - PullRequest
0 голосов
/ 31 августа 2018

У меня есть данные, которые выглядят так:

+-------------+------------+------------------+-------------------+------------------+
|   gender    |    age     |      income      | ate_string_cheese | tech_familiarity |
+-------------+------------+------------------+-------------------+------------------+
| A. Female   | D. 45-54   | B. $50K - $80K   | B. Once or twice  | A. Low           |
| A. Female   | C. 35-44   | A. $35K - $49K   | B. Once or twice  | B. Medium        |
| B. Male     | B. 25-34   | B. 50k - 79,999  | B. Once or twice  | C. High          |
| A. Female   | A. 18-24   | D. $100k - $149k | B. Once or twice  | B. Medium        |
+-------------+------------+------------------+-------------------+------------------+

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

Для ясности результат сверху будет выглядеть так:

+--------+-----+--------+-------------------+------------------+
| gender | age | income | ate_string_cheese | tech_familiarity |
+--------+-----+--------+-------------------+------------------+
|      1 |   4 |      2 |                 2 |                1 |
|      1 |   3 |      1 |                 2 |                2 |
|      2 |   2 |      2 |                 2 |                3 |
|      1 |   1 |      4 |                 2 |                2 |
+--------+-----+--------+-------------------+------------------+

Я предполагаю, что для этого должен быть пакет, но я не могу найти заклинание Google, которое его вызовет. Пожалуйста, знайте, что я полный статистический новичок, который просто возится. Так что, если вы подтолкнете меня к более подробной информации, у меня, вероятно, не будет образованного ответа, чтобы вернуться.

Ответы [ 4 ]

0 голосов
/ 31 августа 2018

Мы можем преобразовать столбцы в factor и привести его к numeric

df[] <- lapply(df, function(x) as.integer(factor(x)))
0 голосов
/ 31 августа 2018

Вам нужно просто извлечь первый символ, преобразовать его в нижний регистр и сопоставить его с номером:

# Your original data frame 
df=read.table(text="gender;age;income;ate_string_cheese;tech_familiarity
A. Female;D.45-54;B.$50K - $80K;B.Once or twice;A.Low
A. Female;C.35-44;A.$35K - $49K;B.Once or twice;B. Medium 
B. Male;B.25-34;B.50k - 79,999;B.Once or twice;C. High 
A. Female;A. 18-24;D.$100k - $149k;B.Once or twice;B. Medium",header=T,sep=";")

myLetters <- letters[1:26]
# Apply match function to df, convert to lowercase and map it with number 
sapply(df, function(x) match(tolower(gsub("([A-Za-z]+).*", "\\1", x)), myLetters))

Выход:

      gender age income ate_string_cheese tech_familiarity
[1,]      1   4      2                 2                1
[2,]      1   3      1                 2                2
[3,]      2   2      2                 2                3
[4,]      1   1      4                 2                2
0 голосов
/ 31 августа 2018

Вы можете обрезать пустое пространство, просто взять части A,B,C,D и вызвать factor в каждом столбце с level=LETTERS[1:4] и labels=1:4.

 structure(factor(sub('\\..*','',trimws(as.matrix(df))),labels=1:4),.Dim=dim(df),dimnames=dimnames(df))

  gender age income ate_string_cheese tech_familiarity
1 1      4   2      2                 1               
2 1      3   1      2                 2               
3 2      2   2      2                 3               
4 1      1   4      2                 2  

Это матрица. Вы можете преобразовать в фрейм данных

0 голосов
/ 31 августа 2018

Чтобы ответить на ваш вопрос о преобразовании категориальных данных в числовые данные в R:

Вы можете преобразовать символьные данные в factor, используя as.factor()

factor возвращает объект класса «factor», который имеет набор целочисленных кодов длиной x с атрибутом «levels» символа режима.

Плюсы:

  • Это позволит кодировать ваши данные численно с помощью атрибута, который отображает значение символа для справки.
  • Можно заказать факторы, которые могут собирать важную информацию о порядковых данных (например, возрастные группы в вашем случае)

Минусы:

  • Остерегайтесь преобразования категориальных данных в числовые для целей статистического анализа данных. Числовые значения, вероятно, не соответствуют шкале интервалов или соотношений для всех вопросов, поэтому использование таких вещей, как среднее или различие между уровнями, может не иметь смысла. например рассмотреть, является ли расстояние между каждым уровнем на самом деле постоянным, имеет ли оно естественную нулевую точку и т. д.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...