r - 根据列表对列进行排序,然后对数据框中的另一列进行排序

标签 r dplyr

我有以下数据框:

tdf <- structure(list(GO = c("Cytokine-cytokine receptor interaction", 
"Cytokine-cytokine receptor interaction|Endocytosis", "I-kappaB kinase/NF-kappaB signaling", 
"NF-kappa B signaling pathway", "NF-kappaB import into nucleus", 
"T cell chemotaxis"), PosCount = c(17, 18, 4, 5, 1, 2), shortgo = structure(c(1L, 
1L, 2L, 2L, 2L, 3L), .Label = c("z", "X", "y"), class = "factor")), .Names = c("GO", 
"PosCount", "shortgo"), row.names = c(NA, 6L), class = "data.frame")
desired_order <- c("y", "X", "z")

看起来像这样:
                                                  GO PosCount shortgo
1             Cytokine-cytokine receptor interaction       17       z
2 Cytokine-cytokine receptor interaction|Endocytosis       18       z
3                I-kappaB kinase/NF-kappaB signaling        4       X
4                       NF-kappa B signaling pathway        5       X
5                      NF-kappaB import into nucleus        1       X
6                                  T cell chemotaxis        2       y

然后我想做的是订购 shortgo带有预定义列表
desired_order <- c("y", "X", "z")

然后对于每个 shortgo group 内部按 PosCount 排序.产生这个:
                                                 GO PosCount shortgo
                                  T cell chemotaxis        2       y
                       NF-kappa B signaling pathway        5       X
                I-kappaB kinase/NF-kappaB signaling        4       X
                      NF-kappaB import into nucleus        1       X
 Cytokine-cytokine receptor interaction|Endocytosis       18       z
             Cytokine-cytokine receptor interaction       17       z

我试过这个但失败了:
library(dplyr)
#tdf %>% arrange(as.character(shortgo), desc(PosCount))
tdf %>% arrange(desired_order, desc(PosCount))

正确的做法是什么?

最佳答案

使用 factor强加你想要的变量的表示 order :

dplyr , 做就是了:

tdf %>% arrange(factor(shortgo,levels=desired_order), desc(PosCount) )

在基础 R 中,只需使用:
tdf[order(factor(tdf$shortgo,levels=desired_order), -tdf$PosCount),]

关于r - 根据列表对列进行排序,然后对数据框中的另一列进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30044020/

相关文章:

r - 如何按条件和按组过滤我的 data.table?

r - 以半 reshape /半聚合方式清理 data.frame

r - 为什么我在 r 中使用 c 得到未使用的参数?

r - 希伯来语在 R 中编码 hell 并在 Windows 中编写 UTF-8 表

r - 对名称以相同数字开头的一对列进行操作

R dplyr : summarise complete cases by group for all variables

r - 排除后续重复行

用于对两个向量进行所有成对比较的 R 函数

r - 在 R 中将 Bing 选项与 taRifx.geo 结合使用

r - 按动态生成的列进行分组,模式为 `dplyr`