Вы можете использовать mutate_at
, как предлагается в комментарии. Для линейной интерполяции вы можете использовать na.interpolation
из пакета imputeTS
.
library(dplyr)
library(imputeTS)
dat2 <- dat %>% mutate_at(vars(-time), funs(Inter = na.interpolation(.)))
dat2
# time maschine1 maschine2 maschine3 maschine1_Inter maschine2_Inter maschine3_Inter
# 1 16:15 7960 8237 9475 7960 8237 9475
# 2 16:20 10480 10757 11995 10480 10757 11995
# 3 16:25 NA NA NA 13000 13277 14515
# 4 16:30 15520 15797 17035 15520 15797 17035
# 5 16:35 18160 18437 19675 18160 18437 19675
Или вы можете использовать lapply
.
dat3 <- dat
dat3[-1] <- lapply(dat[-1], na.interpolation)
dat4 <- dat3[-1]
names(dat4) <- paste(names(dat4), "Inter", sep = "_")
dat5 <- cbind(dat, dat4)
dat5
# time maschine1 maschine2 maschine3 maschine1_Inter maschine2_Inter maschine3_Inter
# 1 16:15 7960 8237 9475 7960 8237 9475
# 2 16:20 10480 10757 11995 10480 10757 11995
# 3 16:25 NA NA NA 13000 13277 14515
# 4 16:30 15520 15797 17035 15520 15797 17035
# 5 16:35 18160 18437 19675 18160 18437 19675
DATA
dat <- read.table(text = "time maschine1 maschine2 maschine3
'16:15' 7960 8237 9475
'16:20' 10480 10757 11995
'16:25' NA NA NA
'16:30' 15520 15797 17035
'16:35' 18160 18437 19675",
header = TRUE, stringsAsFactors = FALSE)