【问题标题】:create increment index for each group, starting row conditional on other column为每个组创建增量索引,以其他列为条件开始行
【发布时间】:2020-09-25 14:32:14
【问题描述】:

假设我有一个类似这样的数据集:

library(tidyverse)

country <- c(rep("Germany", 9), rep("Greece", 9), rep("Turkey", 9), rep("Austria", 9))
date <- rep(seq(ymd('2012-04-07'),ymd('2012-04-15'),by='days'), 4)
gyros_eaten <- c(lag(1:3, n = 2, default = 0), floor(runif(6, min=1, max=4)),
                 lag(1:6, n = 5, default = 0), floor(runif(3, min=1, max=4)),
                 lag(1:2, n = 1, default = 0), floor(runif(7, min=1, max=4)),
                 lag(1:3, n = 2, default = 0), floor(runif(6, min=1, max=4)))
df <- data.frame(country, date, gyros_eaten)

我想创建一个新列,将其命名为 days_since_first_local_gyros,这将告诉我从吃第一个陀螺仪后已经过了多少天,在那个特定的国家 .也就是说,如果还没有吃掉陀螺仪,或者如果那天我吃了我的第一个陀螺仪,它的值将为零。希腊。之后,它会从 1 运行到无穷大,每天增加 1。因此,每个组(即国家/地区)都会有一个不同的索引,并且我的数据集中每个可能的国家/地区 x 天 dyads 在特定时间范围内都有行。

我应该如何创建这个专栏?我认为它是case whengroup_bylag 的某种组合,但我无法理解它。

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    我们可以得到第一个date,其中gyros_eaten &gt; 0 并从country 中减去该日期的所有日期。我们使用pmax 来保持days_since_first_local_gyros 中的最大值为0。

    library(dplyr)
    
    df %>%
      arrange(country, date) %>%
      group_by(country) %>%
      mutate(days_since_first_local_gyros = pmax(as.integer(date - 
                                date[which.max(gyros_eaten > 0)]), 0))
    
    #   country date       gyros_eaten days_since_first_local_gyros
    #   <chr>   <date>           <dbl>                        <dbl>
    # 1 Austria 2012-04-07           0                            0
    # 2 Austria 2012-04-08           0                            0
    # 3 Austria 2012-04-09           1                            0
    # 4 Austria 2012-04-10           1                            1
    # 5 Austria 2012-04-11           1                            2
    # 6 Austria 2012-04-12           2                            3
    # 7 Austria 2012-04-13           2                            4
    # 8 Austria 2012-04-14           2                            5
    # 9 Austria 2012-04-15           3                            6
    #10 Germany 2012-04-07           0                            0
    # … with 26 more rows
    
    

    【讨论】:

    • 谢谢,这正是我需要的!
    猜你喜欢
    • 2012-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-20
    • 2021-12-26
    • 2015-05-25
    • 2021-05-21
    • 1970-01-01
    相关资源
    最近更新 更多