2016-08-01 65 views
1

我有一个名称列的数据框,这些名称重复(同样的人有多个行条目)。我想根据我选择的顺序来订购数据框。例如,这里是问题的一个简化版本:按照选定的目标顺序排序R中的字符向量

df <- data.frame(index = rep(1, 12), name = sample(LETTERS[1:3], 12, replace = TRUE)) 
target <- c('C', 'A', 'B') 

所以我想是订购df使所有与“C”的行是第一,其次是“A”行,那么“B '行。

一种方式来做到这一点是数据帧到子集到单独的情况下,再使用rbind,它的工作原理,但是这似乎并没有有效地为大dataframes有许多不同的名称

+0

相关 - http://stackoverflow.com/questions/11977102/order-data-frame-rows-according-to-a-target-vector-that-specifies-the-desired-or/11977256 – thelatemail

回答

2

是的,你可以做

df[order(match(df$name, target)), ] 

# index name 
#1  1 C 
#4  1 C 
#5  1 C 
#7  1 C 
#9  1 C 
#6  1 A 
#10  1 A 
#11  1 A 
#12  1 A 
#2  1 B 
#3  1 B 
#8  1 B 

行重新排序后,我还没有更新行名为1:nrow(df),但您可以轻松地做到这一点。

相关问题