gpt4 book ai didi

r - r 中某个因子的级别内的排序和编号

转载 作者:行者123 更新时间:2023-12-02 02:57:03 26 4
gpt4 key购买 nike

如果我有以下数据框G:

z    type   x   
1 a 4
2 a 5
3 a 6
4 b 1
5 b 0.9
6 c 4

我正在尝试获取:

z    type   x   y
3 a 6 3
2 a 5 2
1 a 4 1
4 b 1 2
5 b 0.9 1
6 c 4 1

即我想根据向量x对因子type级别内的整个数据帧进行排序。获取每个级别的长度a = 3 b=2 c=1,然后在新向量y中以递减的方式编号。

我的起始位置目前是 sort()

tapply(y, x, sort)

最好先尝试使用 sapply 来分割所有内容吗?

最佳答案

给这只猫剥皮的方法有很多。以下是一种分两步使用基本 R 和矢量化代码的解决方案(无需任何 apply):

  1. 使用 orderxtfrm 对数据进行排序
  2. 使用rlesequence生成序列。

复制您的数据:

dat <- read.table(text="
z type x
1 a 4
2 a 5
3 a 6
4 b 1
5 b 0.9
6 c 4
", header=TRUE, stringsAsFactors=FALSE)

两行代码:

r <- dat[order(dat$type, -xtfrm(dat$x)), ]
r$y <- sequence(rle(r$type)$lengths)

结果:

r
z type x y
3 3 a 6.0 1
2 2 a 5.0 2
1 1 a 4.0 3
4 4 b 1.0 1
5 5 b 0.9 2
6 6 c 4.0 1
<小时/>

order 的调用稍微复杂一些。由于您要按升序对一列进行排序,并按降序对第二列进行排序,因此请使用辅助函数 xtfrm。详细信息请参见 ?xtfrm,但在 ?order 中也有描述。

关于r - r 中某个因子的级别内的排序和编号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10320632/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com