我对问题有3/4分的答案,但在最后部分需要一些帮助。我有一些公司息税前利润的数据。如果息税前利润为负,我想用上一年和当年的平均值代替该值,例如,如果公司在1993年录得负息税前利润,我想得到负年的平均值(1993)和前一年(1992)。
我有以下代码(我在Stackoverflow How to replace NA with mean by subset in R (impute with 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 replacing missing values with the mean of surroundings values
x <- (na.locf(join) + rev(na.locf(rev(join))))/2
答案 0 :(得分:0)
这似乎可以完成工作。现在的问题是连续两年是否为负数.....
y <- join%>%group_by(gvkey)%>%mutate(adj_ebit=purrr::accumulate(ebit,~ifelse(.y<0,(.y+.x)/2,.y)))