【问题标题】:How to renumber the observations based on the value of a column [duplicate]如何根据列的值对观察值重新编号[重复]
【发布时间】:2019-05-04 08:11:37
【问题描述】:

下面是我的数据的简化示例,new 列是我要添加到数据集中的列。基本上,我想使用 1,2,3,4... 重命名riskset,这样我可以更轻松地进行循环。 riskset 中的数字已排序,它们不连续,riskset 中存在重复数字(每个唯一数字 10~11),所以如何添加另一列根据它们的 riskset 数字分组观察?

  riskset            new
a.0000000017          1
a.0000000017          1
a.0000000017          1
a.0000000017          1
a.0000000066          2
a.0000000066          2
a.0000000066          2
a.0000000066          2
a.0000000099          3
a.0000000099          3
a.0000000099          3
a.0000000099          3
a.0000000099          3
              ......

【问题讨论】:

    标签: r bigdata categories data-manipulation


    【解决方案1】:

    一个简单的基本 R 解决方案是使用 factors 然后转换 as.integer

    as.integer(as.factor(df$riskset))
    #[1] 1 1 1 1 2 2 2 2 3 3 3 3 3
    

    或者因为您要求提供dplyr 选项

    df %>% mutate(new = as.integer(as.factor(riskset)))
    

    或使用transform的基本R等效项

    transform(df, new = as.integer(as.factor(riskset)))
    

    另一种选择是使用dplyr::lag 和cumsum

    df %>% mutate(new = cumsum(riskset != lag(riskset, default = T)) + 1)
    

    或者既然你提到了group_by,你可以这样做

    df %>% group_by(riskset) %>% group_indices()
    

    生成组索引。

    group_indices 也适用于mutate

    df %>% group_by(riskset) %>% mutate(new = group_indices())
    

    样本数据

    df <- read.table(text =
        "  riskset            new
    a.0000000017          1
    a.0000000017          1
    a.0000000017          1
    a.0000000017          1
    a.0000000066          2
    a.0000000066          2
    a.0000000066          2
    a.0000000066          2
    a.0000000099          3
    a.0000000099          3
    a.0000000099          3
    a.0000000099          3
    a.0000000099          3", header = T)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-15
      • 2018-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多