R

时间:2015-10-15 07:17:54

标签: r return match rank

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列。数字和等级可以改变很多,所以只是移动列不起作用。我认为我的英语在第一篇文章中并没有说得太清楚。结果应如下所示。

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。这些可能会在现实世界中发生变化,所以会很感激这个帐户。

这是原始答案,谢谢你,但它会混淆Result。不知道它到底在做什么。

Result1 <- returns
Result1[-1] <- returns[-1][cbind(1:nrow(Rank),as.numeric(t(Rank[-1])))]

1 个答案:

答案 0 :(得分:0)

我们可以使用 compile 'com.android.support:multidex:1.0.1' 索引。我们row/column排名&#39;逐行数字(&#39; ri&#39;),将其用作&#39;列&#39;索引,order带有cbind索引(row),从&#39;中提取元素&#39;数据集并将其分配给&#39; Result1&#39;我们之前创建的是为了保持相同的结构。

1:nrow(Rank)