一直试图找到这个问题的答案,但一直没能。说我有数据框,
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
干杯
答案 0 :(得分:2)
使用gsub
连续替换所有数字或逗号("(\\d+|,)"
)和所有非数字("\\D+"
),然后使用order
对DF
进行排序基于此。
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