Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:按第一列排序和排列数据_R_Excel_Sorting - Fatal编程技术网

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))