创造时间来改善r中的+1变量?

时间:2018-10-10 09:14:47

标签: r

我想创建一个“ +1改善时间”变量,我在基准,3、6和9个月时有一个长格式的纵向数据。我如何在r中进行处理?从基线开始的改进。 数据是这样的:

Collection

预期产量

removeRole

我试图用来首先创建改进变量的代码:

sno time WHZ
1    0   -0.5
1    3    1.4
1    6   -0.7
1    9    2.2
2    0   -0.63
2    3    0.7
2    6   -2.64
2    9    2.1

1 个答案:

答案 0 :(得分:1)

如果我正确理解了这个问题,这是一个dplyr解决方案。

library(dplyr)

dat %>%
  group_by(sno) %>%
  mutate(Improv = WHZ - WHZ[1],
         TimeToImprov = ifelse(Improv > 1, time - time[1], NA))
## A tibble: 8 x 5
## Groups:   sno [2]
#    sno  time   WHZ Improv TimeToImprov
#  <int> <int> <dbl>  <dbl>        <int>
#1     1     0 -0.5   0               NA
#2     1     3  1.4   1.9              3
#3     1     6 -0.7  -0.200           NA
#4     1     9  2.2   2.7              9
#5     2     0 -0.63  0               NA
#6     2     3  0.7   1.33             3
#7     2     6 -2.64 -2.01            NA
#8     2     9  2.1   2.73             9

这是基本的R解决方案。

res <- lapply(split(dat, dat$sno), function(DF){
  DF$Improv <- DF$WHZ - DF$WHZ[1]
  DF$TimeToImprov <- ifelse(DF$Improv > 1, DF$time - DF$time[1], NA)
  DF
})
res <- do.call(rbind, res)
row.names(res) <- NULL

res
#  sno time   WHZ Improv TimeToImprov
#1   1    0 -0.50   0.00           NA
#2   1    3  1.40   1.90            3
#3   1    6 -0.70  -0.20           NA
#4   1    9  2.20   2.70            9
#5   2    0 -0.63   0.00           NA
#6   2    3  0.70   1.33            3
#7   2    6 -2.64  -2.01           NA
#8   2    9  2.10   2.73            9

数据。

dat <- read.table(text = "
sno time WHZ
1    0   -0.5
1    3    1.4
1    6   -0.7
1    9    2.2
2    0   -0.63
2    3    0.7
2    6   -2.64
2    9    2.1                  
", header = TRUE)