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”之前。非常感谢您的帮助,只是想确认列名是否已经是数据帧的一部分?dodf$vec非常感谢您的帮助,只是想确认列名是否已经是数据帧的一部分?dodf$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()