找到列右侧的列,其中包含最大和第二大数字

问题描述 投票:0回答:1
A Ai B Bi C Ci  
1 4  2 6  3 5 
2 5  3 5  2 6 
3 6  1 4  1 4 

所以首先我需要找到列(A,B,C)中的最大值和第二大值,并将其列为列名(tie.method = first)。

然后我必须找到右列(A,B,C)中的列,即列(Ai,Bi,Ci)。并根据max(A,B,C)的值放入Ai,Bi,Ci。

应该是这样的:

A Ai B Bi C Ci  max   maxi     2ndmax 2ndmaxi
1 4  2 6  3 5    C    5(Ci)      B     6(Bi)
2 5  3 5  2 6    B    5(Bi)      A     5(Ai)
3 6  1 4  1 4    A    6(Ai)      B     4(Bi)

有可能吗?

想知道我应该把什么放在最后一行

y <- data.frame(A=c(1,2,3),Ai=c(4,5,6),
                B=c(2,3,1),Bi=c(6,4,5),
                C=c(3,1,2),Ci=c(4,6,5)) 

af=cbind(y[,c(1,3,5)])
y$maxcol=colnames(af)[apply(y[,c(1,3,5)],1,which.max)]
y$max_val=
r
1个回答
0
投票
i = grep('i',names(data),invert = T)
j = t(apply(data[i], 1,order,decreasing =T)[1:2,])

data.frame(data,
  matrix(names(data[i])[j],ncol = 2,dim = list(NULL,c('max','2ndmax'))),
  matrix(data[-i][cbind(c(row(j)),c(j))],ncol = 2,dim = list(NULL,c('maxi','2ndmaxi'))))
 A Ai B Bi C Ci max X2ndmax maxi X2ndmaxi
1 1  4 2  6 3  5   C       B    5        6
2 2  5 3  5 2  6   B       A    5        5
3 3  6 1  4 1  4   A       B    6        4

数据:

structure(list(A = 1:3, Ai = 4:6, B = c(2L, 3L, 1L), Bi = 6:4, 
    C = 3:1, Ci = c(5L, 6L, 4L)), class = "data.frame", row.names = c(NA, 
-3L))
© www.soinside.com 2019 - 2024. All rights reserved.