Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按指定顺序对R数据帧进行排序_R_Sorting - Fatal编程技术网

按指定顺序对R数据帧进行排序

按指定顺序对R数据帧进行排序,r,sorting,R,Sorting,假设我有(非常简单的例子): 有人能帮忙吗? 谢谢。我们可以使用指定了级别的因子 library(dplyr) df %>% arrange(factor_name, factor(factor_level, levels = c(1, 2, 3, 4, 6, 8, 'apple', 'peach', 'cherry'))) # factor_name factor_level value #1 fac_X 1 3 #2

假设我有(非常简单的例子):

有人能帮忙吗?
谢谢。

我们可以使用指定了
级别的
因子

library(dplyr)
df %>% 
  arrange(factor_name, factor(factor_level,
      levels = c(1, 2, 3, 4, 6, 8, 'apple', 'peach', 'cherry')))
#   factor_name factor_level value
#1       fac_X            1     3
#2       fac_X            2     6
#3       fac_X            3     4
#4       fac_X            4     1
#5       fac_X            6     5
#6       fac_X            8     2
#7       fac_Y        apple     3
#8       fac_Y        peach     2
#9       fac_Y       cherry     1

定义
正确顺序后,可以使用
match

library(dplyr)

correct_order <- c(1, 2, 3, 4, 6, 8, "apple", "peach", "cherry")
df %>% arrange(factor_name, match(factor_level, correct_order))

#  factor_name factor_level value
#1       fac_X            1     3
#2       fac_X            2     6
#3       fac_X            3     4
#4       fac_X            4     1
#5       fac_X            6     5
#6       fac_X            8     2
#7       fac_Y        apple     3
#8       fac_Y        peach     2
#9       fac_Y       cherry     1
请注意,
正确的\u顺序
应先为
“fac\u X”
设置值,然后为
“fac\u Y”
设置值并不重要。它可以是任何顺序,只要它们之间的值保持不变。因此,上述答案将给出相同的输出:

correct_order <- c("apple", "peach", "cherry", 1, 2, 3, 4, 6, 8)

correct\u order它也可以工作:
df[order(df$factor\u name,df$factor\u level,df$value),
这不是依赖于能够按照与
fac\u X
相同的顺序排序
fac\u Y
?总的来说,我不能在这里做出这样的假设。每个因素都有其特定的顺序。@Alan你是否有完全不同的层次,或者你是否有一个层次与另一个完全不同的方向相反的情况-将修改OP以更清楚地显示是的,好的,我现在可以看到逻辑了。明天我会再玩一些。谢谢。我认为这是可行的(在我刚刚尝试过的一个更复杂的例子中仍然有效)。非常感谢。
library(dplyr)

correct_order <- c(1, 2, 3, 4, 6, 8, "apple", "peach", "cherry")
df %>% arrange(factor_name, match(factor_level, correct_order))

#  factor_name factor_level value
#1       fac_X            1     3
#2       fac_X            2     6
#3       fac_X            3     4
#4       fac_X            4     1
#5       fac_X            6     5
#6       fac_X            8     2
#7       fac_Y        apple     3
#8       fac_Y        peach     2
#9       fac_Y       cherry     1
df[with(df, order(factor_name, match(factor_level, correct_order))), ]
correct_order <- c("apple", "peach", "cherry", 1, 2, 3, 4, 6, 8)