使用dplyr

时间:2017-12-06 20:46:34

标签: r dataframe nested dplyr

我想使用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)

我现在如何根据这些上限和下限过滤数据列中的“值”列?

1 个答案:

答案 0 :(得分:0)

您可以使用Map并行遍历datalowerupper列,然后根据值列过滤嵌套的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