[英]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.