Я имею в виду что-то вроде этого:
У меня есть DataFrame
со столбцами, которые могут быть категорическим или именным. Для каждого наблюдения (строки) я хочу создать новую строку, в которой каждое возможное значение переменных теперь является собственной двоичной переменной. Например, эта матрица (первая строка — метки столбцов)
'a' 'b' 'c'
one 0.2 0
two 0.4 1
two 0.9 0
three 0.1 2
one 0.0 4
two 0.2 5
будет преобразована во что-то вроде этого:
'a' 'b' 'c'
one two three [0.0,0.2) [0.2,0.4) [0.4,0.6) [0.6,0.8) [0.8,1.0] 0 1 2 3 4 5
1 0 0 0 1 0 0 0 1 0 0 0 0 0
0 1 0 0 0 0 0 1 0 1 0 0 0 0
0 1 0 0 0 0 0 1 1 0 0 0 0 0
0 0 1 1 0 0 0 0 0 0 1 0 0 0
1 0 0 1 0 0 0 0 0 0 0 0 1 0
0 1 0 0 1 0 0 0 0 0 0 0 0 1
Каждая переменная (столбец) в исходной матрице объединяется во все возможные значения. Если он категориальный, то каждое возможное значение становится новым столбцом. Если это число с плавающей запятой, то значения каким-то образом группируются (скажем, всегда разбиваются на 10 ячеек). Если это int, то это может быть любое возможное значение int или, возможно, также binning.
К вашему сведению: в моем реальном приложении таблица содержит до 2 миллионов строк, а полная «расширенная» матрица может содержать сотни столбцов.
Есть ли простой способ выполнить эту операцию?
Отдельно я также хотел бы пропустить этот шаг, так как на самом деле я пытаюсь вычислить таблицу Берта (которая представляет собой симметричную матрицу кросс-таблиц). Есть ли простой способ сделать что-то подобное с функцией crosstab
? В противном случае вычисление кросс-табуляции представляет собой простое умножение матриц.