使用dplyr筛选嵌套数据列中的值

使用dplyr筛选嵌套数据列中的值,r,dataframe,nested,dplyr,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)), se

我想使用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)
df%
嵌套(值)%>%
突变(mn=map_dbl(数据,~mean(.$value,na.rm=T)),
sem=map_dbl(数据,~sqrt(var(.$value,na.rm=T)/length(na.omit(.$value)),
上限=mn+3*sem,
下部=锰-3*sem)

现在如何根据这些上下限筛选数据列中的“值”列?

您可以使用
Map
并行循环
数据
列,然后根据值列筛选嵌套的
数据

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
df%>%
mutate(数据=映射(函数(数据,上限,下限)过滤器(数据,数据$value<上限,数据$value>下限),数据,上限,下限))
#一个tibble:3x6
#一个数据集上下
#                            
#1 x 149.5 8.703448 175.6103 123.3897
#2 y 157.5 12.072696 193.7181 121.2819
#3 z 158.5 12.072696 194.7181 122.2819

是否需要将
列也嵌套在结果中?如果不需要,那么从一开始就不需要
nest
,只需使用
groupby(a)%%>%过滤器(valuelower)
。你需要计算这里的上下限。我想用nest。在我的真实数据中,我嵌套在多个列上,因此我喜欢嵌套使数据框更容易可视化。您知道我必须如何修改代码以引用嵌套元素吗?