создание времени на улучшение +1 переменной в г? - PullRequest
0 голосов
/ 10 октября 2018

Я хочу создать переменную «время до улучшения +1». У меня есть продольное значение в длинном формате в начале, через 3, 6 и 9 месяцев.Как мне поступить об этом в г?Улучшение от базовой линии.Данные выглядят так:

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

ожидаемый результат

sno time WHZ      impr   First time to imp
1    0   -0.5      0              3
1    3    1.4      1.9            3
1    6   -0.7     -0.2            3
1    9    2.2      2.7            3
2    0   -0.63     0              3
2    3    0.7       1.33          3
2    6   -2.64    -2.01           3
2    9    2.1        2.73         3

Коды, которые я пытался использовать, чтобы сначала создать переменную улучшения:

library(dplyr)    
data %>%    
  group_by(sno)%>%    
  mutate(ImprvWHZ = data$WHZ - lag(data$WHZ, default = data$WHZ[1]))

1 Ответ

0 голосов
/ 10 октября 2018

Если я правильно понял вопрос, вот решение 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...