returns <- data.frame(date = c('2015.01.01','2015.01.02','2015.01.03','2015.01.04'),
Asset1 = as.numeric(c('0.1','0.1','0.1','0.1')),
Asset2 = as.numeric(c('0.2','0.2','0.2','0.2')),
Asset3 = as.numeric(c('0.3','0.3','0.3','0.3')))
Rank <- data.frame(date = c('2015.01.01','2015.01.02','2015.01.03','2015.01.04'),
Asset1 = as.numeric(c('3','3','3','3')),
Asset2 = as.numeric(c('1','1','1','1')),
Asset3 = as.numeric(c('2','2','2','2')))
我想在新的數據框中匹配等級1返回到列1。數字和等級可能會發生很大的變化,因此只需移動列就行不通了。我覺得我的英文在第一篇文章中並沒有太清楚。結果應該看起來像這樣。排名在R的回報
Result <- data.frame(date = c('2015.01.01','2015.01.02','2015.01.03','2015.01.04'),
Rank1 = as.numeric(c('0.2','0.2','0.2','0.2')),
Rank2 = as.numeric(c('0.3','0.3','0.3','0.3')),
Rank3 = as.numeric(c('0.1','0.1','0.1','0.1')))
由於排名最好(例如清酒)是資產2,所以列Rank1總是會獲得Asset2返回。 Rank2將獲得Asset3的回報,因爲它在整個時間排名第2。這些可以在現實世界中改變,所以會喜歡採取這個帳戶。
這是原來的答案,謝謝你,但它會混淆結果。不知道它在做什麼。
Result1 <- returns
Result1[-1] <- returns[-1][cbind(1:nrow(Rank),as.numeric(t(Rank[-1])))]
爲什麼你使用字符而不是數字? – 2015-10-15 07:20:22
我認爲'結果'有一些值不對應於排名 – akrun
中的值我試圖儘可能準確,在結果中找不到錯誤。 – Hakki