![](/img/trans.png)
[英]How to sort multiple ascending/descending columns in a data.frame: R
[英]How to sort part of a data frame by multiple columns in R?
排序已經在這里討論了很多,但我有一個特殊的問題。 我有一個包含幾列的數據框(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
我需要對這個表進行排序,以便主鍵是類型,輔助鍵是頻率。 但是,這是我的問題,它們需要按特定的類型順序排序。 我需要它們通過 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
有沒有辦法做到這一點? 選擇列類型的特定排序方案。 任何建議都非常感謝。 謝謝
我們可以將“類型”轉換為自定義訂單中指定levels
的factor
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 <- 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))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.