如何基于大于行值的条件选择列值

时间:2019-03-08 03:01:45

标签: r dataframe dplyr lapply

如果列中的任何值大于3,我想从数据框中选择列。

在此mtcars示例中,此标准将删除vsam,因为不存在大于3的值 在这些列中。

                 mpg cyl  disp  hp drat    wt  qsec vs am gear carb
Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2

3 个答案:

答案 0 :(得分:2)

我们可以通过将数据帧与3进行比较来创建逻辑向量,然后使用colSums对列求和,并仅选择其中至少一个值大于3的列。

mtcars[colSums(mtcars > 3) > 0]

#                     mpg cyl  disp  hp drat    wt  qsec gear carb
#Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46    4    4
#Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02    4    4
#Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61    4    1
#Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44    3    1
#....

使用sapply

进行的更改
mtcars[sapply(mtcars, function(x) any(x > 3))]

答案 1 :(得分:1)

使用purrr

mtcars[,purrr::map_lgl(mtcars,~any(.x>3))]

输出(被截断)

   #                      mpg cyl  disp  hp drat    wt  qsec gear carb
   # Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46    4    4
   # Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02    4    4
   # Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61    4    1
   # Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44    3    1
   # Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02    3    2

答案 2 :(得分:0)

我认为

## find max val for each column
maxcolval <- apply(mtcars,MARGIN=2,FUN=max)
## select columns
mtcars[maxcolval>3]

做您想要的。如果您希望使用整洁的解决方案(因为标签中包含dplyr

library(dplyr) 
mtcars %>% select_if(~max(.)>3)