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