首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在数据框中添加一列,该列是另外两列的正元素的排名

在数据框中添加一列,该列是另外两列的正元素的排名
EN

Stack Overflow用户
提问于 2017-03-15 09:12:43
回答 2查看 50关注 0票数 1

假设我在R中有一个数据帧:

代码语言:javascript
复制
d=data.frame(x=c(0,20,0,12,0,73),y=c(22,0,32,0,5,0))

   d
    x  y
 1  0 22
 2 20  0
 3  0 32
 4 12  0
 5  0  5
 6 73  0

现在我想创建另一个列rank,它的值为1表示y的最小正值,2表示y的第二小正值,3表示y的第三小正值,4表示x的最小正值,5表示x的第二小正值,6表示x的第三小正值。这就是我想要的输出:

代码语言:javascript
复制
   d
    x  y rank
 1  0 22 2 
 2 20  0 5
 3  0 32 3
 4 12  0 4
 5  0  5 1
 6 73  0 6

我该怎么做呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-15 09:33:24

当x=0时按y排序,当y=0与先按x排序,然后按y排序时,再按x排序,因此您可以使用order按x排序,然后按y排序,并按此顺序分配排名:

代码语言:javascript
复制
d[order(d$x,d$y),"rank"] <- 1:dim(d)[1]
   x  y rank
1  0 22    2
2 20  0    5
3  0 32    3
4 12  0    4
5  0  5    1
6 73  0    6
票数 4
EN

Stack Overflow用户

发布于 2017-03-15 09:59:02

或者,修改后的选项是在order输出上调用order

代码语言:javascript
复制
d$rank <- order(do.call(order, d))
d
#   x  y rank
#1  0 22    2
#2 20  0    5
#3  0 32    3
#4 12  0    4
#5  0  5    1
#6 73  0    6
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42799464

复制
相关文章

相似问题

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