我想使用dplyr在嵌套数据框中过滤掉异常值(高于或低于平均值+ - 3 * sem)。我不知道如何制定代码来引用下面嵌套的$ data列中的值。例如,
df <- tibble(
a = rep(c('x', 'y', 'z'),100),
value = c(1:298, 999, 1000)) %>%
nest(value) %>%
mutate(mn = map_dbl(data, ~mean(.$value, na.rm = T)),
sem = map_dbl(data, ~sqrt(var(.$value,na.rm=T)/length(na.omit(.$value)))),
upper = mn + 3*sem,
lower = mn - 3*sem)
我现在如何根据这些上限和下限过滤数据列中的“值”列?
答案 0 :(得分:0)
您可以使用Map
并行遍历data
,lower
和upper
列,然后根据值列过滤嵌套的data
:< / p>
df %>%
mutate(data = Map(function(data, upper, lower) filter(data, data$value < upper, data$value > lower), data, upper, lower))
# A tibble: 3 x 6
# a data mn sem upper lower
# <chr> <list> <dbl> <dbl> <dbl> <dbl>
#1 x <tibble [18 x 1]> 149.5 8.703448 175.6103 123.3897
#2 y <tibble [24 x 1]> 157.5 12.072696 193.7181 121.2819
#3 z <tibble [24 x 1]> 158.5 12.072696 194.7181 122.2819