gpt4 book ai didi

r - 我如何 "restart"cur_group_id() 在 R

转载 作者:行者123 更新时间:2023-12-03 21:10:41 28 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





How to create a consecutive group number

(9 个回答)


去年关闭。




我正在尝试使用 创建一个 id 列的 group_by 和 cur_group_id() 函数。这很顺利,但是我希望 cur_group_id() 根据分组变量之一“重新启动”。
示例数据:

df <- data.frame(
X = c(1,1,1,1,1,2),
Y = c(1,1,1,2,2,3),
Z = c(1,1,2,3,3,4)
)
# which looks like this
df
X Y Z
1 1 1
1 1 1
1 1 2
1 2 3
1 2 3
2 3 4
我当前的代码和输出:
library(dplyr)
library(magrittr)
df %<>%
group_by(X, Y, Z) %>%
mutate(ID = cur_group_id()) %>%
ungroup()

df
X Y Z ID
1 1 1 1
1 1 1 1
1 1 2 2
1 2 3 3
1 2 3 3
2 3 4 4
但是,我希望 ID 计数器在达到新的 X 值后立即重新启动,如下所示:
df
X Y Z ID
1 1 1 1
1 1 1 1
1 1 2 2
1 2 3 3
1 2 3 3
2 3 4 1
有没有办法很好地解决这个问题?先感谢您。

最佳答案

既然要重启ID每个X ,您可以 group_by X并为 Y 的每个唯一值创建唯一 ID和 Z .

library(dplyr)
df %>%
group_by(X) %>%
mutate(ID = match(paste(Y, Z), unique(paste(Y, Z))))

# X Y Z ID
# <dbl> <dbl> <dbl> <int>
#1 1 1 1 1
#2 1 1 1 1
#3 1 1 2 2
#4 1 2 3 3
#5 1 2 3 3
#6 2 3 4 1
在基础 R 中,您可以使用 ave相似地 :
df$ID <- with(df, ave(paste(Y, Z), X, FUN = function(x) match(x, unique(x))))

如果您想使用 cur_group_id()具体来说,您可以为 X 的每个值拆分数据。并申请 cur_group_id对于每个数据帧。
df %>%
group_split(X) %>%
purrr::map_df(~.x %>% group_by(Y, Z) %>% mutate(ID = cur_group_id()))

关于r - 我如何 "restart"cur_group_id() 在 R,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64024505/

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