我的数据格式如下:
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
我想要做的是根据第一列订购它们,例如输出将是这样的(其中每列按照tot的顺序排列,并且缺少值有一个空格 - 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),]
这只是我有大量数据的子集,有没有办法对我的数据进行排序?谁能给我一些建议?
答案 0 :(得分:1)
假设我们从这样的事情开始:
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))