如何按R中的多列对数据帧的一部分进行排序?
排序在这里已经讨论了很多,但我有一个特别的问题。我有一个数据框(df)和几个列。所有的观测都属于三种类型中的一种,比如C1、C2和C3。在各种列中,有一列包含一个我称之为频率(f)的值。示例df:如何按R中的多列对数据帧的一部分进行排序?,r,dataframe,sorting,R,Dataframe,Sorting,排序在这里已经讨论了很多,但我有一个特别的问题。我有一个数据框(df)和几个列。所有的观测都属于三种类型中的一种,比如C1、C2和C3。在各种列中,有一列包含一个我称之为频率(f)的值。示例df: Type freq Val C3. 0.34. 10-A C1. 0.90. 4-A C2. 0.40. 5-B C1. 0.65. 3-C C2. 0.77. 5-D C3. 0.11. 5-D 我需要对这个表进行排
Type freq Val
C3. 0.34. 10-A
C1. 0.90. 4-A
C2. 0.40. 5-B
C1. 0.65. 3-C
C2. 0.77. 5-D
C3. 0.11. 5-D
我需要对这个表进行排序,以便主键是类型,次键是频率。然而,这是我的问题,它们需要按照特定的类型顺序进行排序。我需要C1,C3,C2。最后一张表如下所示:
Type freq Val
C1. 0.90. 4-A
C1. 0.65. 3-C
C3. 0.34. 10-A
C3. 0.11. 5-D
C2. 0.77. 5-D
C2. 0.40. 5-B
有办法做到这一点吗?选择列类型的特定排序方案。任何建议都将不胜感激。谢谢我们可以将“类型”转换为自定义订单中指定的
级别的因子
library(dplyr)
df1 %>%
arrange(factor(Type, levels = c('C1.', 'C3.', 'C2.')), desc(freq))
# Type freq Val
#1 C1. 0.90. 4-A
#2 C1. 0.65. 3-C
#3 C3. 0.34. 10-A
#4 C3. 0.11. 5-D
#5 C2. 0.77. 5-D
#6 C2. 0.40. 5-B
或使用data.table
library(data.table)
setDT(df1)[, Type := factor(Type, levels = c('C1.', 'C3.', 'C2.'))]
setorder(df1, Type, -freq)
在base R
中,我们可以
df1[order(factor(df1$Type, levels = c('C1.', 'C3.', 'C2.')), -df1$freq),]
数据
df1我正在使用“dplyr”库。我的最终测向是正确排列频率,但类型的顺序是产生C1,C2,C3,而不是C1,C3,C2。我想知道是否缺少一些内容。@Orion11如果您需要更改列,请将因子
输出指定给该列,然后它就可以工作了。我让它工作了。我错过了“$Type”部分。非常感谢你。
df1 <- structure(list(Type = c("C3.", "C1.", "C2.", "C1.", "C2.", "C3."
), freq = c("0.34.", "0.90.", "0.40.", "0.65.", "0.77.", "0.11."
), Val = c("10-A", "4-A", "5-B", "3-C", "5-D", "5-D")),
class = "data.frame", row.names = c(NA,
-6L))