我有一個向量x,我想根據向量y中值的順序進行排序。這兩個向量長度不一樣。如何根據另一個值對一個向量進行排序
x <- c(2, 2, 3, 4, 1, 4, 4, 3, 3)
y <- c(4, 2, 1, 3)
預期的結果將是:
[1] 4 4 4 2 2 1 3 3 3
我有一個向量x,我想根據向量y中值的順序進行排序。這兩個向量長度不一樣。如何根據另一個值對一個向量進行排序
x <- c(2, 2, 3, 4, 1, 4, 4, 3, 3)
y <- c(4, 2, 1, 3)
預期的結果將是:
[1] 4 4 4 2 2 1 3 3 3
這裏是一個班輪...
y[sort(order(y)[x])]
[編輯:]這個分解如下:
order(y) #We want to sort by y, so order() gives us the sorting order
order(y)[x] #looks up the sorting order for each x
sort(order(y)[x]) #sorts by that order
y[sort(order(y)[x])] #converts orders back to numbers from orders
環比y和移動所有匹配的值X到正確的位置。
x <- c(2, 2, 3, 4, 1, 4, 4, 3, 3)
y <- c(4, 2, 1, 3)
for(i in y) { z <- c(z, rep(i, sum(x==i))) }
結果在Z:4 4 4 2 2 1 3 3 3
的重要步驟:
爲(i的Y) - 環在所關注的元素。
ž< - C(Z,...) - 串接每個子表達式反過來
代表(ⅰ,總和(x == i))的 - 重複I(電流的關注元件)sum(x == i)次(我們在x中找到的次數)。
你可以轉換成x
有序因素:
x.factor <- factor(x, levels = y, ordered=TRUE)
sort(x)
sort(x.factor)
顯然,改變你的號碼爲的因素可以從根本上改變代碼的方式下游反應x
。但既然你沒有給我們任何關於接下來會發生什麼的背景,我想我會建議這是一個選項。
這應該是最好的答案,因爲它適用於非整數情況;或者當'x'中的值不在具有輕微變化的排序矢量'y'中時也工作:'x < - c(2,2,3,4,1,4,4,3,3,6); y < - c(4,2,1,3); as.numeric(as.character(sort(factor(x,unique(c(y,x))))))' – rawr 2017-04-11 23:52:52
[編輯:顯然伊恩有正確的方法,但我會離開這個爲後人]
您可以通過索引你的y向量做這沒有循環。遞增的數值添加到y和合並它們:
y <- data.frame(index=1:length(y), x=y)
x <- data.frame(x=x)
x <- merge(x,y)
x <- x[order(x$index),"x"]
x
[1] 4 4 4 2 2 1 3 3 3
怎麼樣?:
rep(y,table(x)[as.character(y)])
(Ian的可能仍然是更好)
這個怎麼樣
x[order(match(x,y))]
這是非常好的,比接受的答案恕我直言,因爲它更一般。 – fmark 2012-05-21 10:15:37
我會盡可能地說這應該在GNU-R的基礎上。 – 2016-10-17 17:00:27
這真的很有趣,我經常遇到這種情況,並最終重複出現在這一行的答案中。去展示SO如何能夠幫助最簡單的事情哈哈 – 2017-07-31 16:37:16
如果您需要在「Y」不管得到命令,如果它的數字或字符:
x[order(ordered(x, levels = y))]
4 4 4 2 2 1 3 3 3
通過以下步驟:
a <- ordered(x, levels = y) # Create ordered factor from "x" upon order in "y".
[1] 2 2 3 4 1 4 4 3 3
Levels: 4 < 2 < 1 < 3
b <- order(a) # Define "x" order that match to order in "y".
[1] 4 6 7 1 2 5 3 8 9
x[b] # Reorder "x" according to order in "y".
[1] 4 4 4 2 2 1 3 3 3
這很簡潔,但我很難弄清楚發生了什麼。你能詳細說明一下嗎? – 2009-10-14 22:14:41
謝謝! order()讓我感到困惑 - 似乎只是任意重新排列數字,但那只是一個1-4的序列的人造物。 – 2009-10-15 04:04:51
這很漂亮,並且很好地理解了R的內置插件。 +1 – Godeke 2009-10-15 15:21:24