R 基于列表中元素的子集数据

R 基于列表中元素的子集数据,r,dataframe,subset,R,Dataframe,Subset,在R中,我试图使用列表中存储的元素对名为data的data.frame进行子集划分 数据 Data <- read.table(text = " Data_x Data_y Column_X -34 12 A -36 20 D -36 12

R
中,我试图使用
列表中存储的元素对名为
data
data.frame
进行子集划分

数据

Data <- read.table(text = "  Data_x  Data_y  Column_X 
                                -34      12       A
                                -36      20       D
                                -36      12       E
                                -34      18       F
                                -34      10       B
                                -35      24       A
                                -35      16       B
                                -33      22       B
                                -33      14       C
                                -35      22       D", header = T)

数据
%in%
应该可以做到以下几点:

subset(Data, Column_X %in% variableData)
您还可以使用
dplyr
和过滤器:

Data %>% filter(Column_X %in% variableData)

经典
lappy

x <- lapply(variableData, function(x){subset(Data, Column_X == x)})
x
# [[1]]
# Data_x Data_y Column_X
# 1    -34     12        A
# 6    -35     24        A
# 
# [[2]]
# Data_x Data_y Column_X
# 5    -34     10        B
# 7    -35     16        B
# 8    -33     22        B
然而,正如@Frank指出的,您可以在代码中使用基本子集:

Data[Data$Column_X %in% variableData,]
#   Data_x Data_y Column_X
# 1    -34     12        A
# 5    -34     10        B
# 6    -35     24        A
# 7    -35     16        B
# 8    -33     22        B
“警告

这是一个便于交互使用的函数。对于编程来说,最好使用标准的子集设置函数,如
[
,尤其是参数子集的非标准计算可能会产生意外的结果。”(
?subset


此外,行的顺序也会保持不变。

这可能需要变量数据是一个向量(而不是OP使用的列表)。我认为OP无论如何都应该使用向量。@Frank-这个问题甚至连我都问过是使用
list()
还是
vector())
。对于我的问题,我应该坚持使用
可变数据。你可能想阅读
?subset
中的警告。它不是用来编写程序的。@Frank-你吓了我一跳:
?subset
subset可能会有意料之外的后果。
。你能给我举个例子吗?当然。这是关于它的问答,我知道没有仔细阅读,只是简单地记住避免使用
子集
进行编码,所以我不是这方面的真正权威。
do.call(rbind, x)
#   Data_x Data_y Column_X
# 1    -34     12        A
# 6    -35     24        A
# 5    -34     10        B
# 7    -35     16        B
# 8    -33     22        B
Data[Data$Column_X %in% variableData,]
#   Data_x Data_y Column_X
# 1    -34     12        A
# 5    -34     10        B
# 6    -35     24        A
# 7    -35     16        B
# 8    -33     22        B