首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >查找列右侧具有最大数字和第二大数字的列

查找列右侧具有最大数字和第二大数字的列
EN

Stack Overflow用户
提问于 2019-02-20 10:10:13
回答 1查看 35关注 0票数 0
代码语言:javascript
运行
复制
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。

应该如下所示:

代码语言:javascript
运行
复制
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)

这样做有可能吗?

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

代码语言:javascript
运行
复制
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=
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-20 10:30:29

代码语言:javascript
运行
复制
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

数据:

代码语言:javascript
运行
复制
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))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54777812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档