我有一个包含多列的数据框,我按列计算中位数,然后按大于中位数的行进行过滤。我的问题是有某种方法可以创建较短的代码。
注意:我需要的过滤器始终满足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
答案 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