2013-04-01 311 views
3

我有R中的數據幀與包含唯一ID的列中的已有索引位置新的變量和10個變量,看起來像這樣:創建描述特定值

id V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 
1 555 2 1 10 3 8 9 5 7 4 6 
2 681 10 5 4 8 7 3 6 2 9 1 
3 2300 8 5 10 2 3 1 6 9 4 7 

我想創建命名變量or1or10,它爲每一行捕獲值爲1:10的列位置。

因此,例如,在第一行中,編號1出現在名爲V2的列中,所以or1 = 2。如果我設法爲三排正確地做到這一點上面,我會得到如下:

id or1 or2 or3 or4 or5 or6 or7 or8 or9 or10 
1 555 2 1 4 9 7 10 8 5 6 3 
2 681 10 8 6 3 2 7 5 4 9 1 
3 2300 6 4 5 9 2 7 10 1 8 3 

我設法創建or1使用荒謬久置的if/then語句,但我知道有一個更好的可能涉及索引的方式。所有的幫助非常感謝。

回答

4

該做的:

> ord <- data.frame(id = dat$id, t(apply(dat[, -1], 1, order))) 
    id X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 
1 555 2 1 4 9 7 10 8 5 6 3 
2 681 10 8 6 3 2 7 5 4 9 1 
3 2300 6 4 5 9 2 7 10 1 8 3 

(如果「ID」是不是第一個欄,我會更強大dat[!colnames(dat) %in% "id"]更換dat[, -1]

然後,爲了獲得列名酷似你想要:

colnames(ord) <- sub("^X", "or", colnames(ord)) 
+0

聖牛這是高效!感謝這麼多flodel。 – user2230555