首页 > 解决方案 > 如何创建一个新变量,为其他变量上具有相同值组合的案例分配连续数字

问题描述

我有一个包含 110 名参与者的数据集,他们在三个时间范围内的多个会话中回答了相同的问卷。每个时间段的会话数在参与者内部和参与者之间有所不同。

我需要一个新变量,它将连续数字分配给参与者 X 在时间范围 Y 内从 1 到(参与者 X 在时间范围 Y 内完成问卷的会话数)完成问卷调查。

例子:我有

participant  timeframe    date                           
        1     1     2021-04-30 09:12:00
        1     1     2021-04-30 10:03:00
        1     1     2021-05-02 09:20:00
        2     1     2021-04-30 13:00:00
        2     1     2021-05-02 12:13:00
        1     2     2021-05-05 08:34:00
        1     2     2021-05-06 14:15:00
        2     2     2021-05-05 07:12:00
        2     2     2021-05-05 14:13:00
        2     2     2021-05-08 15:22:00

我需要:

 participant   timeframe        date                session per timeframe    
        1         1      2021-04-30 09:12:00                  1
        1         1      2021-04-30 10:03:00                  2
        1         1      2021-05-02 09:20:00                  3
        2         1      2021-04-30 13:00:00                  1
        2         1      2021-05-02 12:13:00                  2
        1         2      2021-05-05 08:34:00                  1
        1         2      2021-05-06 14:15:00                  2
        2         2      2021-05-05 07:12:00                  1
        2         2      2021-05-05 14:13:00                  2
        2         2      2021-05-08 15:22:00                  3

希望有人能帮忙!非常感谢你。

标签: r

解决方案


这是使用 row_number() 的 tidyverse 方法:

library(dplyr)
library(tibble)

dat <- tribble(~participant,  ~timeframe,    ~date,                           
        1,     1,     "2021-04-30 09:12:00",
        1,     1,     "2021-04-30 10:03:00",
        1,     1,     "2021-05-02 09:20:00",
        2,     1,     "2021-04-30 13:00:00",
        2,     1,     "2021-05-02 12:13:00",
        1,     2,     "2021-05-05 08:34:00",
        1,     2,     "2021-05-06 14:15:00",
        2,     2,     "2021-05-05 07:12:00",
        2,     2,     "2021-05-05 14:13:00",
        2,     2,     "2021-05-08 15:22:00") %>% 
  mutate(date = as.POSIXct(date))

dat %>% 
  group_by(participant, timeframe) %>% 
  mutate(session = row_number())

#> # A tibble: 10 x 4
#> # Groups:   participant, timeframe [4]
#>    participant timeframe date                session
#>          <dbl>     <dbl> <dttm>                <int>
#>  1           1         1 2021-04-30 09:12:00       1
#>  2           1         1 2021-04-30 10:03:00       2
#>  3           1         1 2021-05-02 09:20:00       3
#>  4           2         1 2021-04-30 13:00:00       1
#>  5           2         1 2021-05-02 12:13:00       2
#>  6           1         2 2021-05-05 08:34:00       1
#>  7           1         2 2021-05-06 14:15:00       2
#>  8           2         2 2021-05-05 07:12:00       1
#>  9           2         2 2021-05-05 14:13:00       2
#> 10           2         2 2021-05-08 15:22:00       3

reprex 包于 2021-04-30 创建(v0.3.0)


推荐阅读