我正在处理一个大型数据表(~1'000'000 x 700),我想根据跨多个列的 4 个特定值对行进行子集化。
因为我是初学者 R-User,我需要帮助才能实现这一目标。
data.table 如下所示:
[Excel 中的虚构 DT,粗体值/变量是相关的] !()
我正在寻找的是一个“快速”代码,它在任何列中对包含值“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.
我们可以将
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")))
要在 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")
)
subset(df, col2 %in% c("B", "C") | col3 %in% c("W", "V"))
在这个例子中,我们对 df 的行进行子集化,这些行在 col2 中具有值“B”或“C”,或者在 col3 中具有值“W”或“V”。 %in% 运算符用于检查每列中的多个值。
您可以修改此代码以根据特定数据集的需要包含或排除其他列和值。