如果列中的任何值大于3,我想从数据框中选择列。
在此mtcars
示例中,此标准将删除vs
和am
,因为不存在大于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
答案 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)