首页 > 解决方案 > 基于向量过滤数据框的列

问题描述

我有一个包含多列的数据框,我按列计算中值,然后按大于其中值的行进行过滤。我的问题是有一些方法可以创建更短的代码。

注意:我需要的过滤器总是满足 Xi>xi 的条件。

set.seed(123)
df = data.frame(replicate(10,sample(1:10,1000,rep=TRUE)))
x <- sapply(df,median)
library(dplyr)
filter(df, X1 > x[1], X2 > x[2], X3 > x[3], X4 > x[4], X5  > x[5], 
           X6 > x[6], X7 > x[7], X8 > x[8], X9 > x[9], X10 > x[10])

预期产出

  X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
1  8 10  7  9  8  6 10  8  8   9

标签: rdplyr

解决方案


这是一个选项tidyverse

library(tidyverse)
map2(df, x , `>`) %>%
     reduce(`&`) %>% 
     magrittr::extract(df, .,)
#    X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
#930  8 10  7  9  8  6 10  8  8   9

推荐阅读