我有一個data.frame,如下所示。對於name
列中的每組不同值,我想要顛倒ID
列的順序。我不想觸摸其餘的列。我的數據非常龐大。我應該如何有效地做到這一點?R:只根據另一列更改少量列的順序
ID=c(466,469,471,480,509,513,515,517,518,519,520,521,453,455,463,474,477,479,481,482,484,489,496,497,500,503)
name=c(rep("a",12),rep("b",14))
start=c(rep("2/13/2013",12),rep("3/6/2013",14))
end=c(rep("2/20/2013",12),rep("3/13/2013",14))
start=as.Date(start,"%m/%d/%Y")
end=as.Date(end,"%m/%d/%Y")
maint=data.frame(ID,name,start,end)
數據看起來像下面
ID name start end
466 a 2/13/2013 2/20/2013
469 a 2/13/2013 2/20/2013
471 a 2/13/2013 2/20/2013
480 a 2/13/2013 2/20/2013
509 a 2/13/2013 2/20/2013
513 a 2/13/2013 2/20/2013
515 a 2/13/2013 2/20/2013
517 a 2/13/2013 2/20/2013
518 a 2/13/2013 2/20/2013
519 a 2/13/2013 2/20/2013
520 a 2/13/2013 2/20/2013
521 a 2/13/2013 2/20/2013
453 b 3/6/2013 3/13/2013
455 b 3/6/2013 3/13/2013
463 b 3/6/2013 3/13/2013
474 b 3/6/2013 3/13/2013
477 b 3/6/2013 3/13/2013
479 b 3/6/2013 3/13/2013
481 b 3/6/2013 3/13/2013
482 b 3/6/2013 3/13/2013
484 b 3/6/2013 3/13/2013
489 b 3/6/2013 3/13/2013
496 b 3/6/2013 3/13/2013
497 b 3/6/2013 3/13/2013
500 b 3/6/2013 3/13/2013
503 b 3/6/2013 3/13/2013
最終數據應該如下
ID name start end
521 a 2/13/2013 2/20/2013
520 a 2/13/2013 2/20/2013
519 a 2/13/2013 2/20/2013
518 a 2/13/2013 2/20/2013
517 a 2/13/2013 2/20/2013
515 a 2/13/2013 2/20/2013
513 a 2/13/2013 2/20/2013
509 a 2/13/2013 2/20/2013
480 a 2/13/2013 2/20/2013
471 a 2/13/2013 2/20/2013
469 a 2/13/2013 2/20/2013
466 a 2/13/2013 2/20/2013
503 b 3/6/2013 3/13/2013
500 b 3/6/2013 3/13/2013
497 b 3/6/2013 3/13/2013
496 b 3/6/2013 3/13/2013
489 b 3/6/2013 3/13/2013
484 b 3/6/2013 3/13/2013
482 b 3/6/2013 3/13/2013
481 b 3/6/2013 3/13/2013
479 b 3/6/2013 3/13/2013
477 b 3/6/2013 3/13/2013
474 b 3/6/2013 3/13/2013
463 b 3/6/2013 3/13/2013
455 b 3/6/2013 3/13/2013
453 b 3/6/2013 3/13/2013
在你的情況,你可以,也許只是做'維護[順序(MAINT $名稱,-maint $ ID),]'或'data.table :: setorder (maint,name,-ID)'如果你需要效率。或者用'(maint,ave(ID,name,FUN = function(x)sort(x,decrease = TRUE)))' –
我不確定第一個建議是否可行。因爲它將排序開始和結束日期字段,因爲我們按降序對ID進行排序 – user2543622
在這種情況下,第三個選項。或'library(data.table); setDT(maint)[,ID:= sort(ID,decrease = TRUE),by = name]'或者類似於dplyr –