R 未对字符变量进行排序

R 未对字符变量进行排序,r,R,输出正以这种格式打印 tablecrt %>% pivot_longer(Q1.Op:Q22.Buy, "q", "val") %>% mutate(val = factor(val, levels = 9:1 )) %>% tabyl(val, product.or.block, q, show_na = TRUE) 正如您所看到的,问题的排序方式不正确。我想把它作为 Q1.Op Q10.JAR Q12.

输出正以这种格式打印

tablecrt %>%
  pivot_longer(Q1.Op:Q22.Buy, "q", "val") %>%
  mutate(val = factor(val, levels = 9:1 )) %>% 
  tabyl(val, product.or.block, q, show_na = TRUE)
正如您所看到的,问题的排序方式不正确。我想把它作为

Q1.Op    
Q10.JAR    
Q12.Af     
Q21.ex             
Q3.Opi             
Q4.JARaro        

提前感谢。

排序正确:按字母顺序正确。如果您想要基于任意子字符串的整数转换进行排序,那么您需要这样做,语言不会为您猜测

以数字作为数字对任何事物进行排序,可能类似于:


numrank排序正确:按字母顺序正确。如果您想要基于任意子字符串的整数转换进行排序,那么您需要这样做,语言不会为您猜测

以数字作为数字对任何事物进行排序,可能类似于:


numrank您也可以将其存储为因子,或者直接从下面使用
vec_顺序

Q1.Op             
Q3.Opi            
Q4.JARaro           
Q10.JAR           
Q12.Af  

您也可以将其存储为一个因子,或者直接从下面使用
vec_order

Q1.Op             
Q3.Opi            
Q4.JARaro           
Q10.JAR           
Q12.Af  

这个解决方案很棒,但我认为
numrank
函数有点代码高尔菲。如果所有内容都用5个嵌套函数写在一行中,人们很难理解它的功能。我会把它分成几个单独的声明。@qdread,我知道你在说什么,但我现在没有时间。如果你想添加注释,那很好,或者OP可以按照LMc的建议。这个解决方案很好,但我认为
numrank
函数有点代码高尔菲。如果所有内容都用5个嵌套函数写在一行中,人们很难理解它的功能。我会把它分成几个单独的声明。@qdread,我知道你在说什么,但我现在没有时间。如果你想添加注释,那很好,或者OP可以按照LMc的建议进行。它是正确排序的。字符按字母顺序进行排序。“10”评估为“1”,然后为“0”,因此“Q10”应位于“Q4”之前。排序正确。字符按字母顺序进行排序。“10”被评估为“1”,然后是“0”,所以“Q10”应该在“Q4”之前。非常感谢您的帮助,只是想确认列名是否已经是数据帧的一部分?do
df$vec非常感谢您的帮助,只是想确认列名是否已经是数据帧的一部分?do
df$vec
library(stringr)

vec %>%
  stringr::str_extract("\\d+") %>% # get one or more digits from your string
  as.numeric() %>% 
  setNames(vec) %>% # named vector: values are numbers, names are original string
  sort() %>% 
  names()