可能是一个简单的问题。
我有一个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)
因此,我想df按level.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)
有几种选择。一种是基于match“ level.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)