在多列中搜索 4 个特定值时对行进行子集化

问题描述 投票:0回答:2

我正在处理一个大型数据表(~1'000'000 x 700),我想根据跨多个列的 4 个特定值对行进行子集化。

因为我是初学者 R-User,我需要帮助才能实现这一目标。

data.table 如下所示:

[Excel 中的虚构 DT,粗体值/变量是相关的] !(https://i.stack.imgur.com/KzAYD.png)

我正在寻找的是一个“快速”代码,它在任何列中对包含值“X21”或“X22”或“X230”或“X231”(但不是任何其他Xyza-Value)的每一行进行子集化带有“_7_2_Y”并以零 (0) 结尾(符合这些标准的 50 个变量)。 子集行仍应包含每个变量(但我认为应该是这样)。

子集数据最终应该只包含相关行(并且足够小以进行进一步的数据处理)。

我尝试了我在这里读到的几件事,但没有成功(或者不理解它是如何工作的)。

手动子集使用:

*SubX <- subset(fulldata, 
            _7_2_Y10== X21 | _7_2_Y10== X22| _7_2_Y10== X230 | _7_2_Y10== X231|
            _7_2_Y20== X21 | _7_2_Y20== X22| _7_2_Y20== X230 | _7_2_Y20== X231|
            _7_2_Y30== X21 | _7_2_Y30== X22| _7_2_Y30== X230 | _7_2_Y30== X231|
            )*here

会很痛苦。

有人告诉我使用 data.table(用于快速子集化/过滤),但它似乎对多列上的子集行有限制。可能需要中间步骤,但我真的不知道怎么做。

(我不知道如何使用 grep(),因为有一个我不想要的值“X27”。)

我希望我的例子足够有用。 先感谢您, L.

r subset large-data
2个回答
0
投票

我们可以将

filter
%in%
if_any

一起使用
library(dplyr)
fulldata %>%
    filter(if_any(c(`_7_2_Y10`, `_7_2_Y20`, `_7_2_Y30`), ~ .x %in%
       c("X21", "X22", "X230", "X231")))

0
投票

要在 R 中的多个列中搜索 4 个特定值时对行进行子集化,您可以使用 subset() 函数和逻辑 | (或)运算符。这是一个例子:

df <- data.frame(
  col1 = c(1, 2, 3, 4, 5),
  col2 = c("A", "B", "C", "D", "E"),
  col3 = c("X", "Y", "Z", "W", "V")
)

在 col2 和 col3 中具有 4 个特定值的子集行

subset(df, col2 %in% c("B", "C") | col3 %in% c("W", "V"))

在这个例子中,我们对 df 的行进行子集化,这些行在 col2 中具有值“B”或“C”,或者在 col3 中具有值“W”或“V”。 %in% 运算符用于检查每列中的多个值。

您可以修改此代码以根据特定数据集的需要包含或排除其他列和值。

© www.soinside.com 2019 - 2024. All rights reserved.