按列的子字符串

时间:2017-09-19 16:10:24

标签: r regex sorting

一直试图找到这个问题的答案,但一直没能。说我有数据框,

DF <- data.frame (x=c("2,A","1,A","1,C", "1,B"), y = c(1,2,2,1))

产生一个包含两列的Dataframe,第一列有一个数字和一个字母。 如何根据每行的数字部分对DF进行排序?然后,只用字母添加另一列。目标是获得,

    x y z
1 1,A 2 A
2 2,A 1 A
3 1,B 1 B
4 1,C 2 C

干杯

1 个答案:

答案 0 :(得分:2)

使用gsub连续替换所有数字或逗号("(\\d+|,)")和所有非数字("\\D+"),然后使用orderDF进行排序基于此。

DF = DF[order(as.character(gsub("(\\d+|,)", "", DF$x)), as.numeric(gsub("\\D+", "", DF$x))),]
DF$z = gsub("(\\d+|,)", "", DF$x)
DF
#    x y z
#2 1,A 2 A
#1 2,A 1 A
#4 1,B 1 B
#3 1,C 2 C