r - 通过 R 中的多个变量中的多个值对数据进行子集化

标签 r

假设我有这个数据集:

data1 = sample(1:250, 250)
data2 = sample(1:250, 250)
data <- data.frame(data1,data2)

如果我想在“data1”和“data2”中按 30 个值对“data”进行子集化,最好的方法是什么?例如,从“数据”中,我想选择 data1= 4 或 12 或 13 或 24 和 data2= 4 或 12 或 13 或 24 和 data2= 4 或 12 或 13 或 24 的所有行。我想要两个条件都满足的行是真的。

我是这样写的:

subdata <- subset(data, data1 == 4 |data1 == 12 |data1 == 13 |data1 == 24 & data2 == 4 |data2 == 12 |data2 == 13 |data2 == 24)

但这似乎并不满足两个条件,而是一个或另一个。

最佳答案

请注意,在您的原始 子集 中,您没有为 data1data2 包装您的 | 测试括号内的。这会产生“data1= 4 or 12 or 13 or 24 OR data2= 4 or 12 or 13 or 24”的错误子集。你实际上想要:

subdata <- subset(data, (data1 == 4 |data1 == 12 |data1 == 13 |data1 == 24) & (data2 == 4 |data2 == 12 |data2 == 13 |data2 == 24))

下面是如何使用 %in% 修改 subset 函数:

subdata <- subset(data, (data1 %in% c(4, 12, 13, 24)) & (data2 %in% c(4, 12, 13, 24)))

下面我提供了一个优雅的 dplyr 方法和 filter_all:

library(dplyr)
data %>%
  filter_all(all_vars(. %in% c(4, 12, 13, 24)))

注意:

您的sample 函数不容易生成测试实际为真的样本数据。因此,上述解决方案可能会返回零行。因此,我修改了您的示例数据集以生成实际具有您可以子集匹配的行。

数据:

set.seed(1)
data1 = sample(c(4, 12, 13, 24, 100, 123), 500, replace = TRUE)
data2 = sample(c(4, 12, 13, 24, 100, 123), 500, replace = TRUE)
data <- data.frame(data1,data2)

关于r - 通过 R 中的多个变量中的多个值对数据进行子集化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46652012/

相关文章:

r - 在 R 中需要一种有效的方法将彩色 utf-8 表情符号字符转换为其默认皮肤

r - 如何在 dplyr 的过滤器中正确使用 all?

regex - 使用 gsub 从开始到第一次出现字符抓取

r - 如何在不使用列名的情况下在 flextable 对象中指定大标记分隔符?

regex - 提取字符串中最后一个句点之后的文本

r - 访问 R 中列表的第一行

r - 按行加权平均

r - 选择除一列之外的所有重复行

R:使用 ddply 将函数应用于数据子集

r - 有效地选择整数的组合