R 如何创建一个新变量,为其他变量上具有相同值组合的情况分配连续数字

R 如何创建一个新变量,为其他变量上具有相同值组合的情况分配连续数字,r,R,我有一个包含110名参与者的数据集,他们在三个时间范围内多次回答了相同的问卷。每个时间段的会话数在参与者内部和参与者之间有所不同 我需要一个新变量,为参与者X在时间范围Y内完成问卷调查的会话分配连续的数字,从1到(参与者X在时间范围Y内完成问卷调查的会话数) 我有 participant timeframe date 1 1 2021-04-30 09:12:00 1 1

我有一个包含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

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

这里有一个使用row_number()的tidyverse方法:

库(dplyr)
图书馆(tibble)
dat%
突变(日期=as.POSIXct(日期))
dat%>%
分组依据(参与者,时间范围)%>%
变异(会话=行号()
#>#tibble:10 x 4
#>#小组:参与者,时间框架[4]
#>参与者时间表日期会议
#>                                
#>  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

由(v0.3.0)于2021-04-30创建,这里是一个使用行号()的tidyverse方法:

库(dplyr)
图书馆(tibble)
dat%
突变(日期=as.POSIXct(日期))
dat%>%
分组依据(参与者,时间范围)%>%
变异(会话=行号()
#>#tibble:10 x 4
#>#小组:参与者,时间框架[4]
#>参与者时间表日期会议
#>                                
#>  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

由(v0.3.0)创建于2021-04-30。或者,使用
rleid

library(data.table)
df %>%
  group_by(participant, timeframe) %>%
  mutate(session_per_timeframe = rleid(date))
# A tibble: 10 x 4
# Groups:   participant, timeframe [4]
   participant timeframe date                session_per_timeframe
         <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
库(data.table)
df%>%
分组依据(参与者,时间范围)%>%
变异(会话/时间段=rleid(日期))
#一个tibble:10x4
#小组:参与者,时间框架[4]
参与者时间段日期会议每个时间段
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

或者,使用
rleid

library(data.table)
df %>%
  group_by(participant, timeframe) %>%
  mutate(session_per_timeframe = rleid(date))
# A tibble: 10 x 4
# Groups:   participant, timeframe [4]
   participant timeframe date                session_per_timeframe
         <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
库(data.table)
df%>%
分组依据(参与者,时间范围)%>%
变异(会话/时间段=rleid(日期))
#一个tibble:10x4
#小组:参与者,时间框架[4]
参与者时间段日期会议每个时间段
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
我的答案

data %>% group_by(grp = data.table::rleid(participant)) %>%
  mutate(session = row_number())

# A tibble: 10 x 5
# Groups:   grp [4]
   participant timeframe date                  grp session
         <int>     <int> <chr>               <int>   <int>
 1           1         1 2021-04-30 09:12:00     1       1
 2           1         1 2021-04-30 10:03:00     1       2
 3           1         1 2021-05-02 09:20:00     1       3
 4           2         1 2021-04-30 13:00:00     2       1
 5           2         1 2021-05-02 12:13:00     2       2
 6           1         2 2021-05-05 08:34:00     3       1
 7           1         2 2021-05-06 14:15:00     3       2
 8           2         2 2021-05-05 07:12:00     4       1
 9           2         2 2021-05-05 14:13:00     4       2
10           2         2 2021-05-08 15:22:00     4       3
data%>%分组依据(grp=data.table::rleid(参与者))%>%
变异(会话=行号()
#一个tibble:10x5
#组别:grp[4]
参与者时间框架日期grp会议
1           1         1 2021-04-30 09:12:00     1       1
2           1         1 2021-04-30 10:03:00     1       2
3           1         1 2021-05-02 09:20:00     1       3
4           2         1 2021-04-30 13:00:00     2       1
5           2         1 2021-05-02 12:13:00     2       2
6           1         2 2021-05-05 08:34:00     3       1
7           1         2 2021-05-06 14:15:00     3       2
8           2         2 2021-05-05 07:12:00     4       1
9           2         2 2021-05-05 14:13:00     4       2
10           2         2 2021-05-08 15:22:00     4       3
我的答案

data %>% group_by(grp = data.table::rleid(participant)) %>%
  mutate(session = row_number())

# A tibble: 10 x 5
# Groups:   grp [4]
   participant timeframe date                  grp session
         <int>     <int> <chr>               <int>   <int>
 1           1         1 2021-04-30 09:12:00     1       1
 2           1         1 2021-04-30 10:03:00     1       2
 3           1         1 2021-05-02 09:20:00     1       3
 4           2         1 2021-04-30 13:00:00     2       1
 5           2         1 2021-05-02 12:13:00     2       2
 6           1         2 2021-05-05 08:34:00     3       1
 7           1         2 2021-05-06 14:15:00     3       2
 8           2         2 2021-05-05 07:12:00     4       1
 9           2         2 2021-05-05 14:13:00     4       2
10           2         2 2021-05-08 15:22:00     4       3
data%>%分组依据(grp=data.table::rleid(参与者))%>%
变异(会话=行号()
#一个tibble:10x5
#组别:grp[4]
参与者时间框架日期grp会议
1           1         1 2021-04-30 09:12:00     1       1
2           1         1 2021-04-30 10:03:00     1       2
3           1         1 2021-05-02 09:20:00     1       3
4           2         1 2021-04-30 13:00:00     2       1
5.