Изменить алфавитный порядок имен R ошибка? [дубликат]


На этот вопрос уже есть ответ здесь:

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

Похоже, что проблема в том, что reshape работает только в том случае, если названия столбцов расположены в алфавитном порядке. Я немного переписал пример, чтобы объяснить проблему. Как вы можете видеть, в переформатированной таблице значения столбцов переключаются. Значения из " avg "находятся в" asd " и наоборот.

Это ошибка, или я думаю неправильно?

Приветствую Тебя, Сильке

    dw <- read.table(header=T, text='
 sbj f1.avg f1.asd f2.avg f2.asd  blabla
                 A   10    6     50     10      bA
                 B   12    5     70     11      bB
                 C   20    7     20     8       bC
                 D   22    8     22     9       bD
                 ')


reshape(dw, direction='long', 
        varying=c('f1.avg', 'f1.asd', 'f2.avg', 'f2.asd'), 
        timevar='var',
        times=c('f1', 'f2'),
        v.names=c('avg', 'asd'),
        idvar='sbj')
1 2

1 ответ:

Проблема заключается в том, как вы определяете свою переменную varying: Вы говорите R, что все 4 переменные на самом деле являются одной, но это должно быть 2 (avg и asd), Как вы говорите в v.names.
Вы должны определить varying Как список из 2:

reshape(dw, 
        varying=list(c("f1.avg", "f2.avg"), c("f1.asd", "f2.asd")),
        timevar='var', direction="long", idvar="sbj", v.names=c("avg", "asd"), times=c("f1", "f2"))
#     sbj blabla var avg asd
#A.f1   A     bA  f1  10   6
#B.f1   B     bB  f1  12   5
#C.f1   C     bC  f1  20   7
#D.f1   D     bD  f1  22   8
#A.f2   A     bA  f2  50  10
#B.f2   B     bB  f2  70  11
#C.f2   C     bC  f2  20   8
#D.f2   D     bD  f2  22   9