如何根据数据框中的观察顺序添加变量 - R.

时间:2018-03-17 22:52:19

标签: r dplyr

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

… 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获得相同的结果,依此类推。

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

2 个答案:

答案 0 :(得分:1)

使用mutate w / row_number& group_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创建于2018-03-17(v0.2.0)。

答案 1 :(得分:0)

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

library(dplyr)
data.frame(subject = c("A","A","A","B","B","B","C","D","D"),
               latency = c(25,24,25,22,24,23,34,54,34)) -> d

# get counts of unique subjects
d %>% dplyr::count(subject) -> n

# create a list of sequences
lapply(n$n, seq) -> my_list

# paste a "T" to each of these sequences
lapply(my_list,function(x){paste0("T", x)}) -> t_list

# bind the collapsed list back onto your df
d$trial <- do.call(c, t_list)