簡體   English   中英

如何按 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

有沒有辦法做到這一點? 選擇列類型的特定排序方案。 任何建議都非常感謝。 謝謝

我們可以將“類型”轉換為自定義訂單中指定levelsfactor

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM