使用多个不等式表达式在 R 中对数据帧进行子集化
Subset dataframe in R using multiple inequality expressions
问题
这个问题是关于使用多个逻辑条件(特别是严格的不等式)对 R 中的数据框进行子集化的主题的扩展(参见 here and here)。
假设我的变量范围从 0 到 100。我需要创建一个子集,其中 returns 值介于 50 和 100 之间,但也小于 25。
# Data
df$var = seq(1:100)
# Desired Subset
df$var[df$var > 50 & df$var < 100 & df$var < 25]
问题
- 使用基数 R 创建包含多个不等式的子集的最佳方法是什么?
- 使用非基础 R 包的解决方案是否更优雅?
您可以为此使用 dplyr
个过滤器。使用“|” "or".
library(dplyr)
df %>%
filter(var < 25 | (var > 50 & var < 100))
我们可以使用data.table
library(data.table)
setDT(df)[var < 25 |(var > 50 & var < 100)]
由于 OP 要求使用 base-R 子集方法并通过查看答案(他们似乎想要 OP 想要的),以下内容将有所帮助:
df$var[(df$var > 50 & df$var < 100) | df$var < 25]
如果您希望变量介于 50 和 100 之间并且 也 小于 25,那么您需要使用 |
运算符(相当于 OR,因为您可以请参阅其他答案)以获得所需的子集。在下面查看输出;
>
#[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 51 52 53 54
#[29] 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
#[57] 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
问题
这个问题是关于使用多个逻辑条件(特别是严格的不等式)对 R 中的数据框进行子集化的主题的扩展(参见 here and here)。
假设我的变量范围从 0 到 100。我需要创建一个子集,其中 returns 值介于 50 和 100 之间,但也小于 25。
# Data
df$var = seq(1:100)
# Desired Subset
df$var[df$var > 50 & df$var < 100 & df$var < 25]
问题
- 使用基数 R 创建包含多个不等式的子集的最佳方法是什么?
- 使用非基础 R 包的解决方案是否更优雅?
您可以为此使用 dplyr
个过滤器。使用“|” "or".
library(dplyr)
df %>%
filter(var < 25 | (var > 50 & var < 100))
我们可以使用data.table
library(data.table)
setDT(df)[var < 25 |(var > 50 & var < 100)]
由于 OP 要求使用 base-R 子集方法并通过查看答案(他们似乎想要 OP 想要的),以下内容将有所帮助:
df$var[(df$var > 50 & df$var < 100) | df$var < 25]
如果您希望变量介于 50 和 100 之间并且 也 小于 25,那么您需要使用 |
运算符(相当于 OR,因为您可以请参阅其他答案)以获得所需的子集。在下面查看输出;
>
#[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 51 52 53 54
#[29] 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
#[57] 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99