在列的右侧找到编号最大和第二大的列

时间:2019-02-20 02:10:13

标签: r

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)中找到该列,即column(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=

1 个答案:

答案 0 :(得分: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))