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()
)来指示每个 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="-"))
df1 %>%
arrange(id, time) %>%
group_by(id) %>%
mutate(transition = paste0(value[1],"-",value[2]))
假设我在两个时间点 (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()
)来指示每个 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="-"))
df1 %>%
arrange(id, time) %>%
group_by(id) %>%
mutate(transition = paste0(value[1],"-",value[2]))