根据给定的顺序对数据帧进行排序

dan*_*dan 2 r dataframe

可能是一个简单的问题。

我有一个data.frame(样本名称,它们的因子水平以及因子水平的副本):

df <- data.frame(name=c("DP_A","DP_B","PA_A","PA_B","PA_C"),
                 level=c("DP","DP","PA","PA","PA"),
                 replicate=c("A","B","A","B","C"),
                 stringsAsFactors = F)
Run Code Online (Sandbox Code Playgroud)

以及其中一列的给定所需顺序-因子水平:

level.order <- c("PA","DP")
Run Code Online (Sandbox Code Playgroud)

因此,我想dflevel.order(含义df$level)订购。

奖励是,如果我可以第二次添加到level.order我可以订购的产品df$replicate,那么订购产品可以是character(如本例中所示)integer,或它们的组合(例如,A1,A2等)

在这种情况下,顺序df为:

df <- data.frame(name=c("PA_A","PA_B","PA_C","DP_A","DP_B"),
                 level=c("PA","PA","PA","DP","DP"),
                 replicate=c("A","B","C","A","B"),
                 stringsAsFactors = F)
Run Code Online (Sandbox Code Playgroud)

akr*_*run 6

有几种选择。一种是基于matchlevel.order' to get the numeric index and then订单”的“级别”列

df[order(match(df$level, level.order)),]
Run Code Online (Sandbox Code Playgroud)

或将“级别”转换为factor指定levels为“ level.order”,然后order在其上

df[order(factor(df$level, levels = level.order)),]
Run Code Online (Sandbox Code Playgroud)