r - 在 dplyr 中创建新索引/重新索引

标签 r indexing dplyr data-manipulation

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





How to number/label data-table by group-number from group_by?

(6 个回答)


5年前关闭。




我在 R 中使用 dplyr 表。典型的字段是主键、标识组的 ID 号、日期字段和一些值。有些数字我做了一些操作,在一些初步步骤中抛出了一堆数据。

为了进行我的下一步分析(在 MC Stan 中),如果日期和组 ID 字段都是整数索引会更容易。所以基本上,我需要将它们重新索引为介于 1 和不同元素总数之间的整数(group_id 约为 750,date_id 约为 250,group_id 已经是整数,但日期不是)。将其导出到数据框后,这相对简单,但我很好奇在 dplyr 中是否可行。

我尝试创建一个新的 date_val(称为 date_val_new)如下。根据评论中的讨论,我有一些虚假数据。我故意使组和日期值不为 1,但我没有将日期设为实际日期。我使数据不平衡,删除了一些值来说明问题。 dplyr 命令为每个新组从 1 重新开始索引,不管它是什么 date_val。所以每组从 1 开始,即使日期不同。

df1 <- data.frame(id = 1:40,
              group_id = (10 + rep(1:10, each = 4)),
              date_val = (20 + rep(rep(1:4), 10)),
              val = runif(40))
for (i in c(5, 17, 33))
{
    df1 <- df1[!df1$id == i, ]
}

df_new <- df1 %>%
            group_by(group_id) %>%
            arrange(date_val) %>%
            mutate(date_val_new=row_number(group_id)) %>%
            ungroup()

最佳答案

这是基本的R方法:

df1 %>% mutate(date_val_new = match(date_val, unique(date_val)))

或者使用 data.table,df1[, date_val_new := .GRP, by=date_val] .

关于r - 在 dplyr 中创建新索引/重新索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33509852/

相关文章:

r - 在 R 中从头开始计算自相关函数

使用sparklyr从本地桌面读取存储在hdfs上的csv文件

r - R 中 model.matrix 中有序因子的列名称

c# - WPF Datagrid 排序索引问题

mysql - 子查询减慢更新速度

r - 为什么 R case_when 函数与 grepl 函数一起使用而不与 grep 函数一起使用

r - 使用多个条件合并多个列

r - 在R中过滤数据帧

r:在 Flexdashboard 中使用 Shiny 渲染 Kable

sql-server - 带有 where 子句的内连接索引