慕容森
如果你对data.table解决办法,这是一个。这有点棘手,因为您更愿意获得第一个最大值的id。如果你想要最后的最大值,那就容易多了。尽管如此,它并没有那么复杂,而且速度很快!这里我生成了你们维度的数据(26746*18)。数据set.seed(45)DF <- data.frame(matrix(sample(10, 26746*18, TRUE), ncol=18))data.table答:require(data.table)DT <- data.table(value=unlist(DF, use.names=FALSE), colid = 1:nrow(DF), rowid = rep(names(DF), each=nrow(DF)))setkey(DT, colid, value)t1 <- DT[J(unique(colid), DT[J(unique(colid)), value, mult="last"]), rowid, mult="first"]基准:# data.table solutionsystem.time({DT <- data.table(value=unlist(DF, use.names=FALSE), colid = 1:nrow(DF), rowid = rep(names(DF), each=nrow(DF)))setkey(DT, colid, value)t1 <- DT[J(unique(colid), DT[J(unique(colid)), value, mult="last"]), rowid, mult="first"]})# user system elapsed # 0.174 0.029 0.227 # apply solution from @thelatemailsystem.time(t2 <- colnames(DF)[apply(DF,1,which.max)])# user system elapsed # 2.322 0.036 2.602 identical(t1, t2)# [1] TRUE这些维度的数据大约快11倍,而且data.table音阶也很好。编辑:如果任何最大ID都可以,那么:DT <- data.table(value=unlist(DF, use.names=FALSE), colid = 1:nrow(DF), rowid = rep(names(DF), each=nrow(DF)))setkey(DT, colid, value)t1 <- DT[J(unique(colid)), rowid, mult="last"]