簡體   English   中英

如何按 R 中的多列有條件地對數據框進行排序?

[英]How can I sort a data frame conditionally by multiple columns in R?

我正在嘗試按不同列對 dataframe 中的不同行子集進行排序,具體取決於另一列中的值。 因此,例如,D 列中具有給定值的所有行都應按 B 列排序,而 D 列中具有另一個值的所有行應按 C 列排序。 這是一個示例數據框:

colA <- sample(LETTERS, 6)
colB <- sample(c(1:100), 6)
colC <- sample(c(101:200), 6)
condition <- rep(c("good", "bad"), each = 1, times = 3)
df <- data.frame(colA, colB, colC, condition)

>df
  colA colB colC condition
1    F   44  187      good
2    C   32  179       bad
3    A   93  191      good
4    U   66  146       bad
5    Q   72  156      good
6    O   92  124       bad

如果條件“壞”,我想按 colB 排序這個數據幀,如果條件“好”,我想按 colC 排序,導致

> df_sorted
  colA colB colC condition
1    C   32  179       bad
2    U   66  146       bad
3    O   92  124       bad
4    Q   72  156      good
5    F   44  187      good
6    A   93  191      good

到目前為止,我一直在為每個條件創建單獨的數據框,分別對它們進行排序,然后將它們與rbind重新組合在一起。 這種方法有效,但在有很多不同條件時非常乏味。 似乎應該有一種更簡單的方法來做到這一點,但我一直找不到。 非常感激任何的幫助。 謝謝!

也許這個?

set.seed(42)
colA <- sample(LETTERS, 6)
colB <- sample(c(1:100), 6)
colC <- sample(c(101:200), 6)
condition <- rep(c("good", "bad"), each = 1, times = 3)
df <- data.frame(colA, colB, colC, condition)
df
#   colA colB colC condition
# 1    X   74  194      good
# 2    Z   14  126       bad
# 3    G   65  146      good
# 4    T   69  192       bad
# 5    O   44  200      good
# 6    K   97  112       bad

df[with(df, order(condition, ifelse(condition == "bad", colB, colC))),]
#   colA colB colC condition
# 2    Z   14  126       bad
# 4    T   69  192       bad
# 6    K   97  112       bad
# 3    G   65  146      good
# 1    X   74  194      good
# 5    O   44  200      good

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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