我有一个代表资产回报的数据。我希望从每一行中选择top N资产,并计算所选资产的返回均值。详细地说,我想要创建一个函数,该函数将从行中选择不同的元素,并对该元素进行处理。和第一行一样,我想根据排名选择前3位元素,并计算这些元素的平均值。从第二位开始,我想选择前5位和它的平均值等等。我的意思是,元素的数量将因行而异。我试着做一个例子。在下面的示例中,test_data表示要从哪些资产中提取的数据,top_n表示要从每一行提取的资产数量,等级表示将根据将选择哪些资产的资产进行排序。就像从第一排开始,我想根据排名来选择前三名资产。在第二,我想要选择前5个元素,根据rank.In,我将得到每一行顶级n个资产的平均回报。
test_data<-matrix(rnorm(100),nrow=10)
rank<-apply(-test,1,rank)
top_n<-c(3,5,9,4,8,7,6,8,3,2,4)发布于 2019-12-14 03:40:23
我们可以使用sapply循环每一行,使用tail选择它各自的top_n元素,并获取它的mean。
sapply(seq_along(top_n), function(x) mean(tail(sort(test_data[x, ]), top_n[x])))
#[1] 0.881 0.211 0.258 1.265 0.237 1.053 0.939 0.126 0.801 1.652数据
set.seed(123)
test_data<- matrix(rnorm(100),nrow=10)
top_n<-c(3,5,9,4,8,7,6,8,3,2)发布于 2019-12-14 15:52:07
我们可以将mapply与来自base R的asplit一起使用
mapply(function(dat, n) mean(tail(sort(dat), n)), asplit(test_data, 1), top_n)
#[1] 0.8813500 0.2114054 0.2584815 1.2650171 0.2365432 1.0525673
#[7] 0.9391072 0.1261873 0.8011962 1.6519498数据
set.seed(123)
test_data<- matrix(rnorm(100),nrow=10)
top_n<-c(3,5,9,4,8,7,6,8,3,2)https://stackoverflow.com/questions/59332102
复制相似问题