Установить значения столбца в NA после заданной точки - PullRequest
1 голос
/ 05 мая 2020

У меня есть такой набор данных:

ID   NUMBER   X
1      5      2
1      3      4
1      6      3
1      2      5
2      7      3
2      3      5
2      9      3
2      4      2

, и я хотел бы установить значения переменной X в NA после увеличения переменной NUMBER (даже если после того, как она снова уменьшится) для каждого идентификатора, и получение:

ID   NUMBER   X
1     5       2
1     3       4
1     6       NA
1     2       NA
2     7       3
2     3       5
2     9       NA
2     4       NA

Как это сделать? Спасибо за помощь!

Ответы [ 2 ]

1 голос
/ 05 мая 2020

Конечно, не самое элегантное решение, но вполне интуитивно понятное:

library(data.table)
setDT(d)
d[, n := ifelse(NUMBER > shift(NUMBER, 1, "lag"),1,0), by=ID]
d[is.na(n), n := 0]
d[, n := cumsum(n), by=ID]
d[n>0, X := NA ]
d

   ID NUMBER  X n
1:  1      5  2 0
2:  1      3  4 0
3:  1      6 NA 1
4:  1      2 NA 1
5:  2      7  3 0
6:  2      3  5 0
7:  2      9 NA 1
8:  2      4 NA 1
0 голосов
/ 05 мая 2020

Вы можете сделать это с помощью пакета dplyr. Если ваш фрейм данных называется df, вы можете использовать этот код:

df %>% group_by(ID) %>% 
mutate ( X = c(X[1:(min(which(diff(Number) > 0)))],rep("NA",length(X)-(min(which(diff(Number) > 0)))))) %>% 
as.data.frame()

Сначала я сгруппировал их по идентификатору, а затем я нашел первое увеличивающееся число с diff и which.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...