Используйте reshape2, чтобы изменить порядок первых столбцов фрейма данных - PullRequest
0 голосов
/ 22 сентября 2018

У меня есть набор данных с именем toyData.txt, который проверяет влияние параметров (n, mu, sigma) на ожидание и дисперсию случайных чисел нормального распределения и читает

n       mu  sigma  Mean   Variance
100     0     1   0.0068   0.9923
100     0     2   0.0281   3.9589
100     5     1   4.9983   1.0055
100     5     2   4.9850   3.9318
1000    0     1   0.0005   1.0042
1000    0     2   0.0041   3.9920
1000    5     1   4.9886   1.0004
1000    5     2   5.0019   3.9582

Я хочу использоватьбиблиотека (reshap2) в R переупорядочить (n, mu, sigma) в (mu, sigma, n) [или (sigma, mu, n)] и, соответственно, переставить значения Mean и Variance, а затем я пытаюсь

dat1 = read.table("toyData.txt", head=T)
library(reshape2)
dat2 = melt(dat1, id.vars=c("mu","sigma","n"))
#  dat3 = dcast(melt(dat1), ???)

Тогда у меня есть dat2 как

    mu sigma    n variable  value
    0     1  100     Mean 0.0068
    0     2  100     Mean 0.0281
    5     1  100     Mean 4.9983
    5     2  100     Mean 4.9850
    0     1 1000     Mean 0.0005
    0     2 1000     Mean 0.0041
    5     1 1000     Mean 4.9886
    5     2 1000     Mean 5.0019
    0     1  100 Variance 0.9923
    0     2  100 Variance 3.9589
    5     1  100 Variance 1.0055
    5     2  100 Variance 3.9318
    0     1 1000 Variance 1.0042
    0     2 1000 Variance 3.9920
    5     1 1000 Variance 1.0004
    5     2 1000 Variance 3.9582

Однако я хочу получить вывод как

    mu sigma    n   Mean    Variance
    0     1  100  0.0068    0.9923
    0     1 1000  0.0005    1.0042
    0     2  100  0.0281    3.9589
    0     2 1000  0.0041    3.9920
    5     1  100  4.9983    1.0055
    5     1 1000  4.9886    1.0004
    5     2  100  4.9850    3.9318
    5     2 1000  5.0019    3.9582

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

Ответы [ 2 ]

0 голосов
/ 22 сентября 2018

Как было указано, вам не нужно менять форму.Вы также можете использовать data.table для сортировки фреймов данных:

library(data.table)
setDT(dat1)[order(mu,sigma),.(mu,sigma, n, Mean, Variance)]

#returns
   mu sigma    n   Mean Variance
1:  0     1  100 0.0068   0.9923
2:  0     1 1000 0.0005   1.0042
3:  0     2  100 0.0281   3.9589
4:  0     2 1000 0.0041   3.9920
5:  5     1  100 4.9983   1.0055
6:  5     1 1000 4.9886   1.0004
7:  5     2  100 4.9850   3.9318
8:  5     2 1000 5.0019   3.9582
0 голосов
/ 22 сентября 2018

Нет необходимости для изменения формы.Просто измените порядок ваших столбцов, а затем расположите ..

library( tidyverse )

df %>% 
  select( mu, sigma, everything() ) %>%
  arrange( mu, sigma, n )

#   mu sigma    n   Mean Variance
# 1  0     1  100 0.0068   0.9923
# 2  0     1 1000 0.0005   1.0042
# 3  0     2  100 0.0281   3.9589
# 4  0     2 1000 0.0041   3.9920
# 5  5     1  100 4.9983   1.0055
# 6  5     1 1000 4.9886   1.0004
# 7  5     2  100 4.9850   3.9318
# 8  5     2 1000 5.0019   3.9582
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...