【问题标题】:How to add a variable based on order of observation in a dataframe - R如何根据数据框中的观察顺序添加变量 - R
【发布时间】:2018-03-17 22:52:19
【问题描述】:

我想根据数据框中的观察顺序将变量值添加到数据框中。

… Subject Latency(s)
1   A     25
2   A     24
3   A     25
4   B     22
5   B     24
6   B     23

我想添加名为Trial 的第三列,并且我希望根据观察顺序和主题将值设为 T1、T2 或 T3。例如,受试者 A 将在第 1 行获得 T1,在第 2 行获得 T2,在第 3 行获得 T3。然后受试者 B 也是如此,依此类推。

现在我的方法是在dplyr 中使用group_by 按主题分组。但我不确定如何使用mutate 指定新变量。

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    使用mutaterow_numbergroup_by(Subject)

    library(dplyr)
    
    txt <- "ID Subject Latency(s)
    1   A     25
    2   A     24
    3   A     25
    4   B     22
    5   B     24
    6   B     23"
    
    dat <- read.table(text = txt, header = TRUE)
    
    dat <- dat %>% 
      group_by(Subject) %>% 
      mutate(Trial = paste0("T", row_number()))
    dat  
    
    #> # A tibble: 6 x 4
    #> # Groups:   Subject [2]
    #>      ID Subject Latency.s. Trial
    #>   <int> <fct>        <int> <chr>
    #> 1     1 A               25 T1   
    #> 2     2 A               24 T2   
    #> 3     3 A               25 T3   
    #> 4     4 B               22 T1   
    #> 5     5 B               24 T2   
    #> 6     6 B               23 T3
    

    reprex package (v0.2.0) 于 2018 年 3 月 17 日创建。

    【讨论】:

      【解决方案2】:

      此解决方案适用于任意数量的主题。为了说明,请将此代码复制并粘贴到您的控制台中。

      library(dplyr)
      
      d <- data.frame(subject = c("A","A","A","B","B","B","C","D","D"),
                      latency = c(25,24,25,22,24,23,34,54,34))
      
      # get counts of unique subjects
      n <- d %>% dplyr::count(subject)
      
      # create a list of sequences
      my_list <- lapply(n$n, seq) 
      
      # paste a "T" to each of these sequences
      t_list <- lapply(my_list, function(x){paste0("T", x)})
      
      # bind the collapsed list back onto your df
      d$trial <- do.call(c, t_list)
      

      【讨论】:

        猜你喜欢
        • 2015-11-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多