Преобразование формата в R (огромные данные) - PullRequest
1 голос
/ 28 января 2020

Я все еще новый пользователь в R, и я знаю, что есть множество вопросов о преобразовании широкоформатного формата в длинный. Тем не менее, я не могу получить результаты, которые я хочу. Я пытался использовать Reshape, Tidyr, однако я до сих пор не получаю желаемых результатов.

Мои данные выглядят как показано ниже (это только часть N)

     i1 i2 i3 i4 i5 i6 i7 i8 i9 i10 i11 i12 i13 i14 i15 i16 i17 i18 i19 i20 i21 i22 i23 i24 i25 i26 i27
207    0  1  0  0  1  0  0  1  0   0   0   1   0   0   1   0   1   0   0   1   1   1   0   0   0   0   1
334    0  0  0  0  0  0  0  0  0   0   0   0   0   0   1   0   0   0   0   0   0   0   0   0   0   0   1
344    0  1  1  0  0  1  0  0  0   1   0   0   1   0   1   0   1   1   0   1   0   1   1   1   0   0   1
432    1  0  1  1  0  0  0  0  0   1   0   1   0   1   1   0   1   1   0   1   1   0   0   0   0   1   1
616    0  1  1  1  1  0  0  0  0   0   0   1   0   1   1   0   0   1   1   0   0   0   0   0   0   1   1
667    1  0  0  0  0  0  0  0  0   0   0   0   0   1   0   0   0   0   0   0   0   0   0   0   0   0   0

Мой идеальный набор данных

0 207 i1  => the observation of the 207th student at the first item. 
 1 207 i2
 0 207 i3

. , Может ли кто-нибудь помочь мне, как код? Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 28 января 2020

Один из вариантов - создать столбец с именами строк, а затем использовать pivot_longer для создания 3-столбцового data.frame с именем строки, именем столбца и значениями в виде трех столбцов

library(dplyr)
library(tidyr)
as.data.frame(m1) %>%
    rownames_to_column('rn') %>%
    pivot_longer(cols = -rn)
0 голосов
/ 28 января 2020

Использование melt из data.table:

library(data.table)
setDT(df, keep.rownames = T); melt(df, id.vars = "rn")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...