Проблема с перестановкой информационного кадра с использованием melt / cast - PullRequest
0 голосов
/ 23 января 2019

Я хотел бы использовать функцию приведения (изменение формы пакета) для возврата в исходное состояние информационного кадра, но не работает.В моем примере:

#First simulate some data
set.seed(123)
bands=5
data <- data.frame(matrix(runif(10*bands),ncol=bands))
colnames(data) <- paste0(1:bands)
data$nitrogen <- rpois(10,10)
data$Class<-rep("test",10)
#

# Reshape with melt function 
library(reshape)
data2 <- melt(data, id=c("nitrogen","Class"))

#Return to original data state again
data3<-cast(data2, Class+nitrogen~variable)
data3
  Class nitrogen 1 2 3 4 5
1  test        4 1 1 1 1 1
2  test        5 1 1 1 1 1
3  test        6 2 2 2 2 2
4  test        8 1 1 1 1 1
5  test       11 1 1 1 1 1
6  test       12 4 4 4 4 4

Я ожидал:

           1          2         3          4         5 nitrogen Class
1  0.2875775 0.95683335 0.8895393 0.96302423 0.1428000        4  test
2  0.7883051 0.45333416 0.6928034 0.90229905 0.4145463        6  test
3  0.4089769 0.67757064 0.6405068 0.69070528 0.4137243        6  test
...
10 0.4566147 0.95450365 0.1471136 0.23162579 0.8578277       11  test

Не работает мой метод приведения при возврате к объекту данных, какой-нибудь член помогите мне, пожалуйста?Спасибо

1 Ответ

0 голосов
/ 23 января 2019

Комбинации класса и азота не уникальны: четыре раза, когда класс == "тест" и азот == 11, два раза, когда класс == "тест" и азот == 6. Из справочной документации:

Если комбинация переменных, которые вы вводите, не однозначно идентифицирует одну строку в исходном наборе данных, вам нужно будет предоставить агрегирующую функцию fun.aggregate. Эта функция должна принимать вектор чисел и возвращать сводные статистические данные.

Итак, cast агрегирует повторяющиеся комбинации. Вы не сможете вернуться к исходным данным, если не введете фиктивную переменную, которая делает комбинации уникальными.

data$dummy <- 1:10

data3 <- cast(data2, Class + nitrogen + dummy ~ variable)
data3
   Class nitrogen dummy         1          2         3          4         5
1   test        4     1 0.2875775 0.95683335 0.8895393 0.96302423 0.1428000
2   test        5     5 0.9404673 0.10292468 0.6557058 0.02461368 0.1524447
3   test        6     2 0.7883051 0.45333416 0.6928034 0.90229905 0.4145463
4   test        6     3 0.4089769 0.67757064 0.6405068 0.69070528 0.4137243
5   test        8     4 0.8830174 0.57263340 0.9942698 0.79546742 0.3688455
6   test       11    10 0.4566147 0.95450365 0.1471136 0.23162579 0.8578277
7   test       12     6 0.0455565 0.89982497 0.7085305 0.47779597 0.1388061
8   test       12     7 0.5281055 0.24608773 0.5440660 0.75845954 0.2330341
9   test       12     8 0.8924190 0.04205953 0.5941420 0.21640794 0.4659625
10  test       12     9 0.5514350 0.32792072 0.2891597 0.31818101 0.2659726

Измените порядок столбцов и отбросьте манекен, если хотите, чтобы он был точно таким же.

data3[,c(4:8, 2, 1)]
           1          2         3          4         5 nitrogen Class
1  0.2875775 0.95683335 0.8895393 0.96302423 0.1428000        4  test
2  0.9404673 0.10292468 0.6557058 0.02461368 0.1524447        5  test
3  0.7883051 0.45333416 0.6928034 0.90229905 0.4145463        6  test
4  0.4089769 0.67757064 0.6405068 0.69070528 0.4137243        6  test
5  0.8830174 0.57263340 0.9942698 0.79546742 0.3688455        8  test
6  0.4566147 0.95450365 0.1471136 0.23162579 0.8578277       11  test
7  0.0455565 0.89982497 0.7085305 0.47779597 0.1388061       12  test
8  0.5281055 0.24608773 0.5440660 0.75845954 0.2330341       12  test
9  0.8924190 0.04205953 0.5941420 0.21640794 0.4659625       12  test
10 0.5514350 0.32792072 0.2891597 0.31818101 0.2659726       12  test
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...