преобразовать фиктивный фрейм данных в фрейм данных - PullRequest
0 голосов
/ 01 сентября 2018

У меня есть фиктивный фрейм данных измерения 8x12 , и я хочу сгруппировать переменные x1j в x1, x2j в x2 и x3j в x3. Создание фрейма данных размером 8x4 .

set.seed(123)
df <- data.frame(replicate(4,as.factor(sample(1:3,8,rep=TRUE))))

library(dummies)
df.dummy <- dummy.data.frame(df)

Мой фиктивный фрейм данных

df.dummy
  X11 X12 X13 X21 X22 X23 X31 X32 X33 X41 X42 X43
1   1   0   0   0   1   0   1   0   0   0   1   0
2   0   0   1   0   1   0   1   0   0   0   0   1
3   0   1   0   0   0   1   1   0   0   0   1   0
4   0   0   1   0   1   0   0   0   1   0   1   0
5   0   0   1   0   0   1   0   0   1   1   0   0
6   1   0   0   0   1   0   0   0   1   1   0   0
7   0   1   0   1   0   0   0   1   0   0   0   1
8   0   0   1   0   0   1   0   0   1   0   0   1

Ожидаемый результат

df
  X1 X2 X3 X4
1  1  2  1  2
2  3  2  1  3
3  2  3  1  2
4  3  2  3  2
5  3  3  3  1
6  1  2  3  1
7  2  1  2  3
8  3  3  3  3

Если у меня есть фрейм данных, в котором столбцы имеют типовые факторы, могу ли я создать фиктивный фрейм данных с помощью функции dummy.data.frame (), есть ли какая-нибудь функция, которая выполняет обратное? От фиктивного к сгруппированному data.frame.

1 Ответ

0 голосов
/ 01 сентября 2018
df.dummy <- structure(list(X11 = c(1L, 0L, 0L, 0L, 0L, 1L, 0L, 0L), X12 = c(0L, 
0L, 1L, 0L, 0L, 0L, 1L, 0L), X13 = c(0L, 1L, 0L, 1L, 1L, 0L, 
0L, 1L), X21 = c(0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L), X22 = c(1L, 
1L, 0L, 1L, 0L, 1L, 0L, 0L), X23 = c(0L, 0L, 1L, 0L, 1L, 0L, 
0L, 1L), X31 = c(1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L), X32 = c(0L, 
0L, 0L, 0L, 0L, 0L, 1L, 0L), X33 = c(0L, 0L, 0L, 1L, 1L, 1L, 
0L, 1L), X41 = c(0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L), X42 = c(1L, 
0L, 1L, 1L, 0L, 0L, 0L, 0L), X43 = c(0L, 1L, 0L, 0L, 0L, 0L, 
1L, 1L)), .Names = c("X11", "X12", "X13", "X21", "X22", "X23", 
"X31", "X32", "X33", "X41", "X42", "X43"), class = "data.frame",
row.names =  c("1", "2", "3", "4", "5", "6", "7", "8"))

ASSIGN <- gl(4, 3)  ## 4 factor variable; each 3 levels
as.data.frame(lapply(split.default(df.dummy, ASSIGN), max.col))
#  X1 X2 X3 X4
#1  1  2  1  2
#2  3  2  1  3
#3  2  3  1  2
#4  3  2  3  2
#5  3  3  3  1
#6  1  2  3  1
#7  2  1  2  3
#8  3  3  3  3

Существуют и другие способы генерации ASSIGN. В основном это говорит о том, как сгруппировать столбцы df.dummy в правильную факторную переменную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...