R:使用多行中的值进行赋值

R: assignment using values from several rows

假设我在两个时间点 (time) 测量了五个个体 (id) 的某个值 (value 编码为 H、L 或 I)。有时 NA 可能出现在 value:

require(stringr)
require(dplyr)    
set.seed(8)

df1 <- data.frame(
  time=rep(c(1,2), 5),
  id=rep(c("a", "b", "c", "d", "e"),2),
  value=sample(c("H","L","I", NA), replace=T, 10))

我如何制作一个因子变量(最好使用 dplyr::mutate())来指示每个 idvalue 从时间 1 到时间 2 的过渡(例如:像 "HL" 如果 H 在时间 1 和 L 在时间 2).

df1 %>%
  group_by(id) %>%
  arrange(time)

给出:

time id value
1     1  a     L
2     2  a     I
3     1  b     L
4     2  b     H
5     1  c    NA
6     2  c    NA
7     1  d    NA
8     2  d     I
9     1  e     L
10    2  e     I

而且我需要第四列指示时间转换,例如(编造的):

   time id value transition
1     1  a     L         L-I
2     2  a     I         L-I
3     1  b     L         L-H
4     2  b     H         L-H
5     1  c    NA         NA-NA
6     2  c    NA         NA-NA
7     1  d    NA         NA-I
8     2  d     I         NA-I
9     1  e     L         L-I
10    2  e     I         L-I

类似的东西(如果只有 str_c() 命令可以做到):

df1 <- 
  df1 %>%
  group_by(id) %>%
  arrange(time) %>%
  mutate(transition=str_c(value, sep="-"))
df1 %>%
  arrange(id, time) %>% 
  group_by(id) %>%
  mutate(transition = paste0(value[1],"-",value[2]))