R:按第一列排序和排列数据
我的数据如下表所示:R:按第一列排序和排列数据,r,excel,sorting,R,Excel,Sorting,我的数据如下表所示: tot zona a zonab zona c anna francesco anna barbara antonio giancarlo antonio elena barbara giuseppe barbara francesco elena roberto giuseppe giancarlo
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也可以):
我在R中尝试过这一点:
newdat <- spe[order(row.names(spe)),]
newdat假设我们从如下内容开始:
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>
在(mydf{
zonaa你好,Ananda。你能帮我做这个吗?@Boris_-yo,对不起,实际上不是Excel用户!
SPE_NEW <- data[order(spe$row.names),]
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
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))