給定多列使用截止值給定n
列,我希望第一列按降序排列,直到達到截止點,然後再排序第二列,依此類推。這是一個有點棘手的解釋,所以這裏的爲最簡單的情況爲例,有兩列:使用R
df <- structure(list(x = c(0.92, 0.9, 0.9, 0.88, 0.86, 0.52, 0.35, 0.28, 0.02, -0.03,
-0.02, -0.06, -0.06, -0.01, -0.01, 0.01, -0.03, -0.03, 0.01, 0.05, -0.01),
y = c(0.03, -0.01, -0.03, 0, 0.02, 0.01, -0.08, 0.04, 0.71, 0.71, 0.69, 0.57,
0.55, 0.52, 0.4, -0.37, 0.37, 0.36, -0.34, -0.33, -0.32)),
.Names = c("x", "y"), row.names = c(NA, 21L), class = "data.frame")
訂貨後,df
看起來是這樣的:
df[with(df, order (-abs(df$x), -abs(df$y))),]
x y
1 0.92 0.03
3 0.90 -0.03
2 0.90 -0.01
4 0.88 0.00
5 0.86 0.02
6 0.52 0.01
7 0.35 -0.08
8 0.28 0.04
12 -0.06 0.57
13 -0.06 0.55
20 0.05 -0.33
10 -0.03 0.71
17 -0.03 0.37
18 -0.03 0.36
9 0.02 0.71
11 -0.02 0.69
14 -0.01 0.52
15 -0.01 0.40
16 0.01 -0.37
19 0.01 -0.34
21 -0.01 -0.32
只,列x
是有序的,如預期。但是,如果我想設置一個截止值.32
,其中第一列中的變量按降序排列,直到值<.32,因此它切換到排序第二列,我該如何做?
我可以通過分配NA
到值< 0.32做到這一點,但我需要保留所有的值,只是爲了他們以同樣的方式!
df.na<-df
df.na[abs(df.na)<.32]<-NA
df.na[with(df.na, order (-abs(df.na$x), -abs(df.na$y))),]
x y
1 0.92 NA
2 0.90 NA
3 0.90 NA
4 0.88 NA
5 0.86 NA
6 0.52 NA
7 0.35 NA
9 NA 0.71
10 NA 0.71
11 NA 0.69
12 NA 0.57
13 NA 0.55
14 NA 0.52
15 NA 0.40
16 NA -0.37
17 NA 0.37
18 NA 0.36
19 NA -0.34
20 NA -0.33
21 NA -0.32
8 NA NA
該解決方案將最終被一個DF使用10+列,因此可擴展性是一個問題!
當abs(x)和abs(y)都小於.32時,是否存在這種情況? – Heroka
是的,但很少。實際的實施將有10多列。 – luser
對於下一次,在你的問題中提到.... – Heroka