根据向量过滤数据框的列

时间:2018-11-07 03:18:50

标签: r dplyr

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

注意:我需要的过滤器始终满足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

2 个答案:

答案 0 :(得分:2)

这里是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

答案 1 :(得分:1)

这是一种方法-

filter(df, apply(df, 1, function(a) all(a > x)))

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