Если у меня есть этот фрейм данных:
df <- data.frame(time = seq(as.Date('2000-01-01'), length.out = 200, by = 'days'),
a = rnorm(200,8.4, 22), b=rnorm(200,8.4, 22), d= rnorm(200,8.4, 22),
e=rnorm(200,8.4, 22))
Какой самый простой способ установить это значение df
, чтобы значения в каждом столбце были выше, чем 10-й процентный процентиль, но ниже, чем на 90-й процентный?
Я мог бы сделать это с помощью цикла, т. Е.
for (i in names(df[,2:5])){
print(i)
column <- df[,c('time', i)]
q <- unname(quantile(column[,2], probs = c(0.1, 0.9))) # just for one column
column <- column[column[,2] > q[1] &column[,2] < q[2],]
df <- merge(df, column, by = 'time', all.x = T)
}
Но есть более простые и элегантные способы сделать это, используя функции или пакеты, такие как dplyr
. Спасибо!