【问题标题】:R: assignment using values from several rowsR:使用来自多行的值进行赋值
【发布时间】:2015-03-07 16:59:07
【问题描述】:

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

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 的转换(例如:如果 H 在时间 1 和 L,则类似于“HL”在时间 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="-"))

【问题讨论】:

    标签: r variable-assignment dplyr


    【解决方案1】:
    df1 %>%
      arrange(id, time) %>% 
      group_by(id) %>%
      mutate(transition = paste0(value[1],"-",value[2]))
    

    【讨论】:

    • paste(value, collapse='-')) (+1)
    • 啊,这么简单(如果你知道的话)。完美 - +1。
    • 如果您对 id 有不同数量的时间观察,我猜想 akrun 的更通用(DMC 无法知道,因为我在我的问题中没有提到这一点)?
    • 最后,都是关于 group_by()
    猜你喜欢
    • 2016-11-16
    • 2010-12-18
    • 2013-10-25
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    • 2019-09-23
    • 1970-01-01
    • 2017-06-17
    相关资源
    最近更新 更多