фильтровать столбцы данных на основе вектора - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть фрейм данных с несколькими столбцами, для которого я вычисляю медиану по столбцу, а затем фильтрую по строкам, которые больше его медианы. У меня вопрос, есть ли способ создать более короткий код.

Примечание: Мне нужен фильтр, который всегда удовлетворяет условию 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 голосов
/ 07 ноября 2018

Вот вариант с 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
0 голосов
/ 07 ноября 2018

Вот один из способов -

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...