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

时间:2015-01-09 11:21:02

标签: r variable-assignment dplyr

假设我在两个时间点(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="-"))

1 个答案:

答案 0 :(得分:2)

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