【问题标题】:R | How to create a column with values from previous period by ID右 |如何按 ID 创建包含上一期间值的列
【发布时间】:2021-07-12 05:30:40
【问题描述】:

我的数据如下所示:

period id category
1 1234 1
1 2345 2
1 4567345 1
2 1234 3
2 2345 3
2 4567345 1
3 123467 2
3 234567 2
3 45673 1

我需要为每个 ID 创建一个新列“category_pre”,其中包含上一时期的类别值。如果在上一期间未找到 ID,则脚本应返回“NA”。新列应添加到现有数据框中。

最好的方法是什么?

谢谢!

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    我们可以从dplyr这里使用lag()函数:

    df <- df %>%
        group_by(id) %>%
        mutate(category_pre = lag(category, order_by=period))
    df
    
      period      id category category_pre
       <dbl>   <dbl>    <dbl>        <dbl>
    1      1    1234        1           NA
    2      1    2345        2           NA
    3      1 4567345        1           NA
    4      2    1234        3            1
    5      2    2345        3            2
    6      2 4567345        1            1
    7      3  123467        2           NA
    8      3  234567        2           NA
    9      3   45673        1           NA
    

    【讨论】:

      【解决方案2】:

      第一步,新建一个周期+1的数据框:

      df2 = data.frame(period=df$period+1, id=df$id, category=df$category)
      

      第二步,合并 period 和 id 上的两个数据框,all.x=T 确保包含没有上一个 period 的行(带 NA):

      merge(df, df2, by=c('period','id'), all.x = T)
      

      第三步,将列重命名为 category 和 category_pre。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-02
        • 1970-01-01
        • 1970-01-01
        • 2016-06-02
        • 1970-01-01
        • 1970-01-01
        • 2017-04-09
        • 2012-09-04
        相关资源
        最近更新 更多