按数字排序数据框

时间:2016-08-20 17:29:43

标签: r sorting dataframe

我有一个大约40列2000行的数据框。其中一个有这样的数字和字母:

CLN

5T
14S
1A
12N

首先,我使用melt来获取数据的长结构。我想在yaxis上用CLN绘制我的数据,但是数字的顺序如:1A,5T,12N,14S。我知道我必须使用sort,但我怎么能为我的数字和字母做到这一点? (我很抱歉,但我的df很大,我不能提供一个有成效的例子)。

2 个答案:

答案 0 :(得分:4)

Auth Component尝试mixedsort

gtools

答案 1 :(得分:1)

如果我们需要sort数字,一种方法是使用sub删除非数字部分,转换为numericorder列。 OP的帖子说

  

我怎么能只为我的数字而不是字母呢?

v1 <- as.numeric(sub("\\D+", "", df1$CLN))
df1$CLN <- df1$CLN[order(v1)]
df1$CLN
#[1] "1A"  "5T"  "12N" "14S"

如果我们需要为字母和数字执行此操作

v2 <- sub("\\d+", "", df1$CLN)
df1$CLN <- df1$CLN[order(v1, v2)]

然后,我们将factor更改为levels,并将unique指定为'{1}}元素,以便在plot中使用该订单。

df1$CLN <- factor(df1$CLN, levels = unique(df1$CLN))

注意:这些是base R选项,没有使用任何包。

数据

df1 <- data.frame(CLN = c("5T", "14S", "1A", "12N"), stringsAsFactors=FALSE)