首页 > 解决方案 > 如果一行中的任何变量大于一个值,则将该行保留在 R 中

问题描述

所以,我有一个有效的代码:

minimum_ozone <- 65

ozone <- subset(ozone, ozone[2] >= minimum_ozone | ozone[3] >= minimum_ozone | ozone[4] >= minimum_ozone | ozone[5] >= minimum_ozone | ozone[6] >= minimum_ozone | ozone[7] >= minimum_ozone
             | ozone[8] >= minimum_ozone | ozone[9] >= minimum_ozone | ozone[10] >= minimum_ozone | ozone[11] >= minimum_ozone | ozone[12] >= minimum_ozone | ozone[13] >= minimum_ozone
             | ozone[14] >= minimum_ozone | ozone[15] >= minimum_ozone | ozone[16] >= minimum_ozone | ozone[17] >= minimum_ozone | ozone[18] >= minimum_ozone | ozone[19] >= minimum_ozone
             | ozone[20] >= minimum_ozone | ozone[21] >= minimum_ozone | ozone[22] >= minimum_ozone | ozone[23] >= minimum_ozone | ozone[24] >= minimum_ozone | ozone[25] >= minimum_ozone)

但是,这段代码似乎太庞大了......是否有更短的代码/更快的方法来执行它?

标签: rsubset

解决方案


set.seed(1)

ozone <- as.data.frame(matrix(sample(40:70, 50, replace=TRUE), 10))
ozone
#    V1 V2 V3 V4 V5
# 1  48 46 68 54 65
# 2  51 45 46 58 60
# 3  57 61 60 55 64
# 4  68 51 43 45 57
# 5  46 63 48 65 56
# 6  67 55 51 60 64
# 7  69 62 40 64 40
# 8  60 70 51 43 54
# 9  59 51 66 62 62
# 10 41 64 50 52 61

minimum_ozone <- 65
ozone[which(apply(ozone, 1, max) > minimum_ozone), ]
#   V1 V2 V3 V4 V5
# 1 48 46 68 54 65
# 4 68 51 43 45 57
# 6 67 55 51 60 64
# 7 69 62 40 64 40
# 8 60 70 51 43 54
# 9 59 51 66 62 62

推荐阅读