r - 如何为 R 中按给定类型的行拆分的连续行分配 ID?
问题描述
我有一个数据框,其行代表人。对于给定的族,第一行在1
column 中具有值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 解决方案。
解决方案
数据:
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 的解决方案就是完美的。
推荐阅读
- python - PyTorch 神经网络未针对图像对齐任务进行训练
- python-3.x - Azure AAD 身份验证,在浏览器中单击了错误的 Microsoft ID,现在每次身份验证都失败
- php - 卸载 Xdebug 3 并安装 v2.9.8
- oracle - Oracle apex - 提交时不发送项目值
- azure - 入口控制器不需要证书吗?用于执行 https
- selenium - 如何使用 Selenium 4 (devTools) 从网络选项卡获取响应正文
- spreadsheet - 将更改的 ZIP 文件从网站下载到 Google 电子表格
- mongodb - MongoDB 5.0 原生时间序列集合上的慢查询
- python-3.x - Pymongo,电机内存泄漏
- excel - 从网页复制数据并粘贴到 Excel