我正在尝试使用前k个值计算数据框中每列的平均值。我有一个解决方案,然而,它是缓慢的,并且是混合的。以下是我提出的建议:
predictMat <- matrix(0,nrow = length(colnames(DT)),ncol = 1)
k <- 100
itemSummary <- for(i in colnames(DT)) {
u <- data.frame(DT[,i , drop = F])
sortU1 <- data.frame(u[order(u[,i], decreasing = T),, drop = F])
u1Neighbors <- data.matrix(sortU1[1:k,, drop = F])
predictMat[i] <- mean(u1Neighbors, na.rm = T)
}
答案 0 :(得分:3)
您可以使用apply
功能在一行中执行此操作:
# Sample data frame
set.seed(144)
DT <- matrix(rnorm(1000), nrow=100)
k <- 10
# Compute average of 10 largest values in each column
apply(DT, 2, function(x) mean(tail(sort(x), k)))
# [1] 1.721765 1.658917 1.630231 1.558280 1.606363 1.526322 1.810814 1.678135
# [9] 1.541305 1.621984
答案 1 :(得分:1)
可以通过背靠背应用功能来实现这一目标
set.seed(100)
x <- as.data.frame ( matrix(runif(5000,0,10), nrow=1000,ncol=5) )
x1<- apply(x,2,sort,decreasing=T)
apply(x1[1:100,],2,mean)
V1 V2 V3 V4 V5
9.548000 9.572912 9.422325 9.547370 9.462894
编辑:看起来我的答案落后了几秒钟!