r - 一致地按两列索引
问题描述
如何使用两列创建一致的列“id”?我需要分别通过'Date'和'Tr'获取索引列'id'。我有数据:
Date Tr
1 20190829 1
2 20190829 1
3 20190829 1
4 20190829 1
5 20190829 2
6 20190829 2
7 20190830 2
8 20190830 2
9 20190830 2
10 20190830 2
11 20190830 1
12 20190830 1
示例数据:
data<-data.frame(Date=c(rep(20190829,6),rep(20190830,6)),Tr=c(rep(1,4),rep(2,6),rep(1,2)))
我正在尝试使用这样的东西:
data$id <- cumsum(c(TRUE, diff(data$Tr) != 0))
Date Tr Id
1 20190829 1 1
2 20190829 1 1
3 20190829 1 1
4 20190829 1 1
5 20190829 2 2
6 20190829 2 2
7 20190830 2 2
8 20190830 2 2
9 20190830 2 2
10 20190830 2 2
11 20190830 1 3
12 20190830 1 3
但我需要一个结果:
data2<-data.frame(Date=c(rep(20190829,6),rep(20190830,6)),Tr=c(rep(1,4),rep(2,6),rep(1,2)),id=c(rep(1,4),rep(2,2),rep(3,4),rep(4,2)))
Date Tr Id
1 20190829 1 1
2 20190829 1 1
3 20190829 1 1
4 20190829 1 1
5 20190829 2 2
6 20190829 2 2
7 20190830 2 3
8 20190830 2 3
9 20190830 2 3
10 20190830 2 3
11 20190830 1 4
12 20190830 1 4
我如何使用 R 来做到这一点?有没有可以快速产生结果的软件包?
解决方案
data.table
有一个方便的功能
library(data.table)
data$Id <- rleid(data$Date, data$Tr)
# Date Tr Id
# 1 20190829 1 1
# 2 20190829 1 1
# 3 20190829 1 1
# 4 20190829 1 1
# 5 20190829 2 2
# 6 20190829 2 2
# 7 20190830 2 3
# 8 20190830 2 3
# 9 20190830 2 3
# 10 20190830 2 3
# 11 20190830 1 4
# 12 20190830 1 4
推荐阅读
- ionic-framework - 使用组件 ion-datetime 信息以两行显示
- xamarin - 如何将存储文件保存到用户在 UWP 中选择的位置?
- php - Symfony - 重置数据库的最佳实践
- r - 如何在我的数据框中创建一个映射到 R 中列表的列?
- python - 从 Facebook Graph API 在 python 中获得喜欢
- c++ - 基于可被另一个数字整除的子数组中的索引
- javascript - 创建可以管理外部数据的抽象组件
- javascript - 如何为输入类型文件设置值
- php - 推送到 cPanel:如何设置?
- python - 如何修复:Django 表单:{{ form }} 在动态 html 页面中不起作用