gpt4 book ai didi

r - 用子集对数据进行排名

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

说我有以下形式的数据:

> x <- data.frame(yr = c(1,1,1,1), wk = c(1,1,2,2), id = c("a","b","a","b"), dat1 = c(3,1,10,11), dat2 = c(3,1,10,11), dat3 = c(4,2,12,8))
> x
yr wk id dat1 dat2 dat3
01 01 a 3 3 4
01 01 b 1 1 2
01 02 a 10 10 12
01 02 b 11 11 8

我想在 rankyr子集上返回 wk的数据帧。有速记方法吗?
yr   wk   id  dat1Rnk  dat2Rnk  dat3Rnk
01 01 a 1 1 1
01 01 b 2 2 2
01 02 a 2 2 1
01 02 b 1 1 2

最佳答案

您可以使用data.table进行以下操作。首先定义列,然后取反列(因为您以降序排列),然后重新分配列

library(data.table)
cols <- paste0("dat", 1:3)
setDT(x)[, (cols) := lapply(-.SD, frank), .SDcols = cols, by = .(yr, wk)]
x
# yr wk id dat1 dat2 dat3
# 1: 1 1 a 1 1 1
# 2: 1 1 b 2 2 2
# 3: 1 2 a 2 2 1
# 4: 1 2 b 1 1 2

或使用 dplyr
library(dplyr)
x %>%
group_by(yr, wk) %>%
mutate_each(funs(rank(-.)), -id)
# Source: local data frame [4 x 6]
# Groups: yr, wk [2]
#
# yr wk id dat1 dat2 dat3
# (dbl) (dbl) (fctr) (dbl) (dbl) (dbl)
# 1 1 1 a 1 1 1
# 2 1 1 b 2 2 2
# 3 1 2 a 2 2 1
# 4 1 2 b 1 1 2

关于r - 用子集对数据进行排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36585279/

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