2017-02-27 2 views
0

行のゼロに等しくない値を持つ列名を、最大値と2番目に高い値で識別しようとしています。データセット:2番目に高い値の列名と値

DT=data.frame(Row=c(1,2,3,4,5),Price=c(2.1,2.1,2.2,2.3,2.5), 
     '2.0'= c(100,300,700,400,0), 
     '2.1'= c(400,200,100,500,0), 
     '2.2'= c(600,700,200,100,-200), 
     '2.3'= c(300,0,-300,100,100), 
     '2.4'= c(400,0,0,500,600), 
     '2.5'= c(0,200,0,800,-100),check.names=FALSE) 

目的である最高カラムでゼロに等しくない任意の値を有し、最高列の値、及びゼロに等しくない任意の値を有する第2の最高値を持つ列を有していますそれは、2列目:

DT=data.frame(Row=c(1,2,3,4,5),Price=c(2.1,2.1,2.2,2.3,2.5), 
     '2.0'= c(100,300,700,400,0), 
     '2.1'= c(400,200,100,500,0), 
     '2.2'= c(600,700,200,100,-200), 
     '2.3'= c(300,0,-300,100,100), 
     '2.4'= c(400,0,0,500,600), 
     '2.5'= c(0,200,0,800,-100),check.names=FALSE, 
     Highest=c(2.4,2.5,2.3,2.5,2.5),Second=c(2.3,2.2,2.3,2.4,2.4)) 

最高のコードは次のとおりです。

DT$Highest <- apply(DT[-1], 1, function(x) max(as.numeric(names(which(x>0|x<0))))) 

乾杯

答えて

2
DT$highest = colnames(DT)[2+apply(DT[,3:8], 1, function(x) 
        which(x != 0 & x == sort(x, decreasing = TRUE)[1])[1])] 
#[1] "2.2" "2.2" "2.0" "2.5" "2.4" 

DT$second_highest = colnames(DT)[2+apply(DT[,3:8], 1, function(x) 
        which(x != 0 & x == sort(x, decreasing = TRUE)[2])[1])] 
#[1] "2.1" "2.0" "2.2" "2.1" "2.3" 
関連する問題