r - 对列值大于阈值的行进行子集化

标签 r dataframe subset

我有一个包含 70 列的数据集。

我想对数据集的整个行进行子集化,其中第 5 到 70 列中的任何列中的值都大于值 7。

我尝试了以下代码,但是,我不想要 TRUE/FALSE 值。我只想从数据框中消除不符合标准的行

subset <- (data[, 5:70] > 7)

最佳答案

我们可以使用 rowSums

data[rowSums(data[5:70] > 7) > 0, ]

或与子集

subset(data, rowSums(data[5:70] > 7) > 0)

我们也可以使用 dplyr 中的 filter_atany_vars

library(dplyr)
data %>% filter_at(vars(5:70), any_vars(. > 7))

使用来自 mtcars 的可重现数据(从 @Maurits Evers 窃取的想法)

mtcars[rowSums(mtcars[3:11] > 300) > 0, ]

#                     mpg cyl disp  hp drat    wt  qsec vs am gear carb
#Hornet Sportabout   18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
#Duster 360          14.3   8  360 245 3.21 3.570 15.84  0  0    3    4
#Cadillac Fleetwood  10.4   8  472 205 2.93 5.250 17.98  0  0    3    4
#Lincoln Continental 10.4   8  460 215 3.00 5.424 17.82  0  0    3    4
#Chrysler Imperial   14.7   8  440 230 3.23 5.345 17.42  0  0    3    4
#Dodge Challenger    15.5   8  318 150 2.76 3.520 16.87  0  0    3    2
#AMC Javelin         15.2   8  304 150 3.15 3.435 17.30  0  0    3    2
#Camaro Z28          13.3   8  350 245 3.73 3.840 15.41  0  0    3    4
#Pontiac Firebird    19.2   8  400 175 3.08 3.845 17.05  0  0    3    2
#Ford Pantera L      15.8   8  351 264 4.22 3.170 14.50  0  1    5    4
#Maserati Bora       15.0   8  301 335 3.54 3.570 14.60  0  1    5    8

使用 filter_at 也可以得到相同的输出

mtcars %>% filter_at(vars(3:11), any_vars(. > 300))

关于r - 对列值大于阈值的行进行子集化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55583699/

相关文章:

r - 根据文本删除列和下一列

r - 理解日期并使用 R 中的 ggplot2 绘制直方图

r - 在ggplot中为多个组绘制配对数据

python - 使用Python高效实现多个列表中的单词计数

python - 从 Pandas Dataframe 中删除非工作日

r - R中data.table中的快速子集化

python - 元组是另一个元组的子集 - Apriori 算法

RStudio 语法格式 - 粗体函数名称

r - Lubridate 创建间隔运算符 %--% 抛出 "' 原点'必须提供“NA 上的错误

python - 如何在 Excel 中用 "\n"字符串替换换行符