假设我在两个时间点(value
)测量了五个人(id
)中的某个值(time
编码为H,L或I)。有时NAs可能出现在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()
),表示每个id
value
从时间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="-"))
答案 0 :(得分:2)
df1 %>%
arrange(id, time) %>%
group_by(id) %>%
mutate(transition = paste0(value[1],"-",value[2]))