首页 > 解决方案 > 如何为 R 中按给定类型的行拆分的连续行分配 ID?

问题描述

我有一个数据框,其行代表人。对于给定的族,第一行在1column 中具有值A,并且所有后续行都包含同一族的成员,直到在 columnA中的另一行具有值为止1。然后,一个新的家庭开始了。

我想为我的数据集中的所有家庭分配 ID。换句话说,我想采取:

A
1
2
3
1
3
3
1
4

并将其变成:

A    family_id
1    1
2    1
3    1
1    2
3    2
3    2
1    3
4    3

我正在玩一个 300 万行的数据框,所以for我想出的一个简单的循环解决方案没有达到必要的效率。此外,family_id不需要是顺序的。

我将采用 dplyr 解决方案。

标签: rdplyr

解决方案


数据:

df <- data.frame(A = c(1:3,1,3,3,1,4))

代码:

df$familiy_id <- cumsum(c(-1,diff(df$A)) < 0)

结果:

#  A familiy_id
#1 1          1
#2 2          1
#3 3          1
#4 1          2
#5 3          2
#6 3          2
#7 1          3
#8 4          3

请注意:

当出现的数字小于前一个数字时,此解决方案会启动一个新组。

当它 100% 确定一个新组总是以1一致开始时,那么 ronak 的解决方案就是完美的。


推荐阅读