在R中排序带有字符和数字的向量

时间:2016-08-04 06:39:50

标签: r

我想对像

这样的矢量进行排序

M = C(1, “< 4”,5,7, “< 12”,15,18, “< 21”, “< 25”,27) N = C(2, “< 4”,8,17,20,25,34, “&γ-35”,40,43)

仅按数字排序

输出如(1,2,“< 4”,“< 4”,5,7,8,...,< 35,40,43)

我在gtools库中尝试过mixedsort,但它不起作用。

并且,是否有任何函数可以标记每个元素来自哪个向量?

例如,0表示矢量m的数字,1表示矢量n

并得到类似(0,1,0,1,0,0,1,...,1,1,1)

的输出

感谢

1 个答案:

答案 0 :(得分:0)

我们将“m”和“n”的names设置为“0”和“1”,将其连接到单个vector,并通过提取数字部分将order连接起来在新的向量中(使用gsub)转换为numericorder并使用该索引对'n1'进行排序。

n1 <- c(setNames(m, rep(0, length(m))),setNames(n, rep(1, length(n))))
r1 <- n1[order(as.numeric(gsub("\\D+", "", n1)))]

as.vector(r1)
#[1] "1"   "2"   "<4"  "<4"  "5"   "7"   "8"   "<12" "15"  "17"  "18"  "20"  
#[13]  "<21" "<25" "25"  "27"  "34"  "<35" "40"  "43" 

as.integer(names(r1))
#[1] 0 1 0 1 0 0 1 0 0 1 0 1 0 0 1 0 1 1 1 1