作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这个问题在这里已经有了答案:
How to create a consecutive group number
(9 个回答)
去年关闭。
我正在尝试使用 dplyr 创建一个 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/
我有以下数据框: df % mutate(group = match(s_do_h_patients_state, unique(s_do_h_patients_state))) 输出 # A tib
我有以下数据框: df % mutate(group = match(s_do_h_patients_state, unique(s_do_h_patients_state))) 输出 # A tib
这个问题在这里已经有了答案: How to create a consecutive group number (9 个回答) 去年关闭。 我正在尝试使用 dplyr 创建一个 id 列的 group
我是一名优秀的程序员,十分优秀!