Замените отрицательные значения средним значением предыдущей записи и текущим значением - PullRequest
0 голосов
/ 19 октября 2018

У меня 3/4 ответа на вопрос, но мне нужна помощь в заключительной части.У меня есть некоторые данные для EBIT компаний.Если показатель EBIT отрицательный, я хотел бы заменить значение средним значением предыдущего года и текущего года, например, если компания зафиксировала отрицательный показатель EBIT в 1993 году, я хотел бы получить среднее значение отрицательного года (1993) ипредыдущий год (1992).

У меня есть следующий код (который я нашел в Stackoverflow Как заменить NA средним значением подмножеством в R (вменять с помощью plyr?) ), но я бы хотелхотел бы изменить функцию impute.mean, чтобы отразить изменения, которые я хочу.То есть я действительно не хочу преобразовывать отрицательные числа в NA

years <- c(1990, 1991, 1992, 1993, 1994)
gvkey <- c(1000, 1100, 1200, 1300, 1400, 1500)

join <- as.data.frame(rep_len(years, length.out = length(gvkey) * 
length(years)))
join$gvkey <- rep(gvkey, length(years))
join$ebit <- runif(nrow(join), min=-100, max=100)

join$ebit[join$ebit < 0] <- NA    ## very inefficient way of recognizing negative values 

colnames(join) <- c("year", "gvkey", "ebit")

impute.mean <- function(x) replace(x, is.na(x), mean(x, na.rm = TRUE))

join <- join %>%
group_by(gvkey) %>%
 mutate(
  ebit = impute.mean(ebit))

Я также нашел это, что идеально, за исключением вопроса NA R, заменяющего пропущенные значения средним значением окружения

x <- (na.locf(join) + rev(na.locf(rev(join))))/2

1 Ответ

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

Это похоже на работу.Теперь проблема, если два года подряд отрицательны .....

y <- join%>%group_by(gvkey)%>%mutate(adj_ebit=purrr::accumulate(ebit,~ifelse(.y<0,(.y+.x)/2,.y)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...