Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在每列中找出k个最高值,并计算R中的平均值_R_Statistics - Fatal编程技术网

在每列中找出k个最高值,并计算R中的平均值

在每列中找出k个最高值,并计算R中的平均值,r,statistics,R,Statistics,我试图使用前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

我试图使用前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)
}

predictMat您可以使用
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
#示例数据帧
种子集(144)

DT您可以使用
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
#示例数据帧
种子集(144)

DT可以通过背对背的应用功能实现这一点

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 
set.seed(100)

x可以通过背对背的应用功能实现这一点

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 
set.seed(100)

x因为您在
x1
中存储数据的第二个副本,如果您的数据集有多行,这可能会非常低效。因为您在
x1
中存储数据的第二个副本,如果您的数据集有多行,这可能会非常低效。