【问题标题】:How to reset a sequence in a R dataframe's column, based on the levels of a different column如何根据不同列的级别将 R 数据框中的序列重置为列
【发布时间】:2022-12-07 04:26:37
【问题描述】:

我有记录主题和会话信息的数据,如下所示:

> Subject <- c(rep("A", 6), rep("B", 7))
> Session <- c(rep(1, 3), rep(2, 3), rep(8, 4), rep(9, 3))
> df <- data.frame(Subject, Session)
> df
   Subject Session
1        A       1
2        A       1
3        A       1
4        A       2
5        A       2
6        A       2
7        B       8
8        B       8
9        B       8
10       B       8
11       B       9
12       B       9
13       B       9

问题在于原始数据并不总是具有一致的会话编号(因此受试者 B 的第一个会话从会话 8 而不是 1 开始)。理想情况下,有一个列可以在每个新主题出现时重置会话编号。像这样:

   Subject Session New_Sess
1        A       1        1
2        A       1        1
3        A       1        1
4        A       2        2
5        A       2        2
6        A       2        2
7        B       8        1
8        B       8        1
9        B       8        1
10       B       8        1
11       B       9        2
12       B       9        2
13       B       9        2

我尝试了一个带有嵌套 for 循环的解决方案,但无法让它工作。我怀疑一定有一个直接的解决方案(它似乎不应该那么困难)但是尽管我尽了最大的努力,它已经完全避开了我。

实际数据集非常庞大且繁琐,因此针对此问题的自动化解决方案会有所帮助。

【问题讨论】:

    标签: r dataframe sequence nested-loops


    【解决方案1】:

    我们可以使用match

    library(dplyr)
     df %>% group_by(Subject) %>% mutate(New_Sess = match(Session, unique(Session)))
    

    factor

     df %>% group_by(Subject) %>% mutate(New_Sess = as.integer(factor(Session)))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-11
      • 2018-05-27
      • 1970-01-01
      • 1970-01-01
      • 2020-06-16
      相关资源
      最近更新 更多