为什么R不按正确的顺序排列我的小插曲?

时间:2019-12-18 18:35:32

标签: r dataframe

我有一个包含两列的数据框,需要按时间顺序排列然后合并。 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

您会看到第四行的顺序不正确。看来xy列也不是按顺序排列的。我觉得这很琐碎,但会引起一些偷偷摸摸的问题。

1 个答案:

答案 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