对段落编号排序

Kir*_*ill 6 sorting r dataframe

我有一个带段落编号的简单表格:

> table <- data.frame(id=c(1,2,3,4,5,6,7,8,9), paragraph=c("1.1.1.1","1","2","1.1","100","1.2","10","1.1.1","1.1.2"))
> print(table)

id paragraph
1   1.1.1.1
2         1
3         2
4       1.1
5       100
6       1.2
7        10
8     1.1.1
9     1.1.2
10     1.10
Run Code Online (Sandbox Code Playgroud)

我想通过这种方式对它进行排序:

id paragraph
2         1
4       1.1
8     1.1.1
1   1.1.1.1
9     1.1.2
6       1.2
10     1.10
3         2
7        10
5       100
Run Code Online (Sandbox Code Playgroud)

对我来说这个问题(我可能将它们拆分.data.frame然后应用多列排序),是因为我不知道输出中可能有多少个点 - 数量可能会不时变化.

Jul*_*ora 2

这是一种选择:

sp <- strsplit(as.character(table$paragraph), "\\.")
ro <- sapply(sp, function(x) sum(as.numeric(x) * 100^(max(lengths(sp)) + 0:(1 - length(x)))))
table[order(ro), ]
#    id paragraph
# 2   2         1
# 4   4       1.1
# 8   8     1.1.1
# 1   1   1.1.1.1
# 9   9     1.1.2
# 6   6       1.2
# 10 10      1.10
# 3   3         2
# 7   7        10
# 5   5       100
Run Code Online (Sandbox Code Playgroud)

显然,级别结构不容忽视,sp我首先拆分了段落编号。然后,为了通过保留顺序将段落编号转换为整数,对于每个段落编号,我将节的编号乘以 100^n(对于特定的 n),将小节的编号乘以 100^(n-1),等等on(在实践中使用 100 就足够了,但您也可以使用更大的数字),这样它们的总和就是所需的整数,并且ro是它们的向量。