R:按第一列sorting和排列数据

我有这种forms的数据:

tot zona a zonab zona c anna francesco anna barbara antonio giancarlo antonio elena barbara giuseppe barbara francesco elena roberto giuseppe giancarlo francesco silvia roberto gianluca giancarlo sussanna silvia giovanna gianluca valentina valentina giuseppe giovanna roberto giuseppe silvia roberto silvia sussanna valentina 

我想要做的就是按照第一列来sorting,比如输出结果就是这样的(每一列都按照tot来排列,而缺less的值则有一个空格 – NA也会很好) :

 tot zona a zonab zona c anna anna barbara antonio antonio barbara barbara elena elena francesco francesco francesco giancarlo giancarlo giancarlo gianluca gianluca giovanna giovanna giuseppe giuseppe giuseppe roberto roberto roberto roberto silvia silvia silvia silvia sussanna sussanna valentina valentina valentina 

我在R中试过这个:

 newdat <- spe[order(row.names(spe)),] 

要么

 Spe <- arrange(SPE, Total) 

要么

 SPE_NEW <- data[order(spe$row.names),] 

这只是我有大量数据的子集,有没有办法对我的数据进行sorting? 任何人都可以给我一些build议吗?

假设我们从看起来像这样的东西开始:

 mydf # tot zonaa zonab zonac # 1 anna francesco anna barbara # 2 antonio giancarlo antonio elena # 3 barbara giuseppe barbara francesco # 4 elena roberto giuseppe giancarlo # 5 francesco silvia roberto gianluca # 6 giancarlo sussanna silvia giovanna # 7 gianluca valentina valentina giuseppe # 8 giovanna roberto # 9 giuseppe silvia # 10 roberto # 11 silvia # 12 sussanna # 13 valentina 

你可以尝试使用match

 within(mydf, { zonaa <- zonaa[match(tot, zonaa)] zonab <- zonab[match(tot, zonab)] zonac <- zonac[match(tot, zonac)] }) # tot zonaa zonab zonac # 1 anna <NA> anna <NA> # 2 antonio <NA> antonio <NA> # 3 barbara <NA> barbara barbara # 4 elena <NA> <NA> elena # 5 francesco francesco <NA> francesco # 6 giancarlo giancarlo <NA> giancarlo # 7 gianluca <NA> <NA> gianluca # 8 giovanna <NA> <NA> giovanna # 9 giuseppe giuseppe giuseppe giuseppe # 10 roberto roberto roberto <NA> # 11 silvia silvia silvia <NA> # 12 sussanna sussanna <NA> <NA> # 13 valentina valentina valentina <NA> 

这是相同的想法,更简洁地实施。

 mydf2 <- mydf ## Work on a copy instead of overwriting your data mydf2[-1] <- lapply(mydf2[-1], function(x) x[match(mydf2[[1]], x)]) mydf2 

这里有一些可重现格式的数据:

 mydf <- structure(list(tot = c("anna", "antonio", "barbara", "elena", "francesco", "giancarlo", "gianluca", "giovanna", "giuseppe", "roberto", "silvia", "sussanna", "valentina"), zonaa = c("francesco", "giancarlo", "giuseppe", "roberto", "silvia", "sussanna", "valentina", "roberto", "silvia", "", "", "", ""), zonab = c("anna", "antonio", "barbara", "giuseppe", "roberto", "silvia", "valentina", "", "", "", "", "", ""), zonac = c("barbara", "elena", "francesco", "giancarlo", "gianluca", "giovanna", "giuseppe", "", "", "", "", "", "")), .Names = c("tot", "zonaa", "zonab", "zonac"), class = "data.frame", row.names = c(NA, -13L))