我有一个大约40列2000行的数据框。其中一个有这样的数字和字母:
CLN
5T
14S
1A
12N
首先,我使用melt
来获取数据的长结构。我想在yaxis上用CLN绘制我的数据,但是数字的顺序如:1A,5T,12N,14S。我知道我必须使用sort
,但我怎么能为我的数字和字母做到这一点? (我很抱歉,但我的df很大,我不能提供一个有成效的例子)。
答案 0 :(得分:4)
从Auth Component
尝试mixedsort
:
gtools
答案 1 :(得分:1)
如果我们需要sort
数字,一种方法是使用sub
删除非数字部分,转换为numeric
和order
列。 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)