gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 05:19:17 28 4
gpt4 key购买 nike

假设我有这个数据集:

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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com