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然后应用多列排序),是因为我不知道输出中可能有多少个点 - 数量可能会不时变化.
这是一种选择:
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是它们的向量。
| 归档时间: |
|
| 查看次数: |
139 次 |
| 最近记录: |