假设我有这个数据集:
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)
但这似乎并不满足两个条件,而是一个或另一个。
最佳答案
请注意,在您的原始 子集
中,您没有为 data1
和 data2
包装您的 |
测试括号内的。这会产生“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/