我有一个包含两列的数据框,需要按时间顺序排列然后合并。 R很奇怪地将整数100放在10之后。我不知道如何停止这种行为。
这是一个reprex示例。
library(tidyverse)
library(glue)
set.seed(123)
df <- tibble(x = 0:100,
y = sample(0:100, 101, T))
df_i <- df %>%
mutate(id = row_number(),
z = glue('{x}.{y}'))
df_i %>%
arrange(z)
# A tibble: 101 x 4
x y id z
<int> <int> <int> <glue>
1 0 30 1 0.30
2 1 78 2 1.78
3 10 24 11 10.24
4 100 22 101 100.22
5 11 89 12 11.89
6 12 90 13 12.90
7 13 68 14 13.68
8 14 90 15 14.90
9 15 56 16 15.56
10 16 91 17 16.91
# … with 91 more rows
您会看到第四行的顺序不正确。看来x
和y
列也不是按顺序排列的。我觉得这很琐碎,但会引起一些偷偷摸摸的问题。
答案 0 :(得分:4)
'z'是glue
对象(根据?glue
-Format and interpolate a string
,因此它是字符串输出),需要将其转换为numeric
df_i %>%
arrange(as.numeric(z))
如果我们检查glue
源代码,它将调用glue_data
,后者依次调用as_glue
并检查将转换为as_glue
的{{1}}
character
该行为类似于methods('as_glue')
getAnywhere('as_glue.default')
#function (x, ...)
#{
# as_glue(as.character(x))
#}
的{{1}}数字向量
sort