将数据帧转换为矩阵时,保留数据帧的行和列顺序

时间:2019-02-13 19:33:21

标签: r dataframe matrix reshape2

我有一个数据框:

 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)

输出按字母顺序排列plantlep的名称,但是我希望将数据帧中的顺序保留在矩阵中。

以下是所需的输出:

 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 :(得分:0)

因子将按其级别顺序排序,默认情况下按字母顺序排序。您可以使用levels的{​​{1}}参数指定其他顺序。 factor将按其出现的顺序返回唯一值,我们可以在此处使用它:

unique