Сохранять порядок строк и столбцов кадра данных при преобразовании кадра данных в матрицу - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть фрейм данных:

 df<- data.frame(lep= c("Tarchon", "Tarchon", "Tarchon", "Tarchon", "Tarchon", 
               "Gonodonta","Gonodonta","Gonodonta", "Apatelodes"), 
               plant=c("Amphimoea","Desmotrichia", "Paches", "Neoxeniades",
                       "Desmotrichia","Neoxeniades","Amphimoea", "Acribia","Sychesia"), 
               freq=c(2,5,1,3,4,2,1,1,4))

, который я преобразую в матрицу, используя:

mat1<-acast(df, plant~lep, value.var="freq", sum)

В выходных данных алфавитные имена plant и lep, однако яхотите, чтобы порядок в кадре данных сохранялся в матрице.

Вот требуемый вывод:

 mdat <- matrix(c(2,5,1,3,0,0,1,0,0,2,0,0,0,0,0,0,0,4), nrow = 6, ncol = 3, byrow = TRUE,
           dimnames = list(c("Amphimoea","Desmotrichia", "Paches", "Neoxeniades",
                             "Acribia","Sychesia"),
                           c("Tarchon","Gonodonta", "Apatelodes")))

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

1 Ответ

0 голосов
/ 13 февраля 2019

Коэффициенты будут отсортированы по порядку их уровней, который по умолчанию установлен в алфавитном порядке.Вы можете указать другой порядок, используя levels аргумент factor.unique вернет уникальные значения в порядке их появления, которые мы можем использовать здесь:

df$lep = factor(df$lep, levels = unique(df$lep))
df$plant = factor(df$plant, levels = unique(df$plant))

reshape2::acast(df, plant~lep, value.var="freq", sum)
#              Tarchon Gonodonta Apatelodes
# Amphimoea          2         1          0
# Desmotrichia       9         0          0
# Paches             1         0          0
# Neoxeniades        3         2          0
# Acribia            0         1          0
# Sychesia           0         0          4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...