如何在R中简化和泛化此子集命令?

如何在R中简化和泛化此子集命令?,r,subset,R,Subset,在分析脚本中,我必须多次执行以下子集命令: subset(df1, A == df2[1,'A'] & V == df2[1,'B'] & C == df2[1,'C'] & D == df2[1,'D']) 在R中有没有一种方法可以通用化这个命令?我想要类似的东西 classifiers <- c( 'A', 'B', 'C', 'D' ) subset(df1, classifiers == df2[1,classifiers]) 分类

在分析脚本中,我必须多次执行以下子集命令:

subset(df1, A == df2[1,'A'] & V == df2[1,'B'] & C == df2[1,'C'] & D == df2[1,'D'])
在R中有没有一种方法可以通用化这个命令?我想要类似的东西

classifiers <- c(
  'A',
  'B',
  'C',
  'D'
  )

subset(df1, classifiers == df2[1,classifiers])
分类器像这样吗

#Some data:
set.seed(42)
DF <- as.data.frame(matrix(sample(LETTERS[1:4],400,TRUE),ncol=4))
#e.g., classifiers <- DF2[1, c('A','B')]
classifiers <- c(
  'A',
  'B'
) 

ind <- colSums(t(DF[,c('V1','V2')])==classifiers)==length(classifiers)

DF[ind,]
#   V1 V2 V3 V4
#18  A  B  B  C
#22  A  B  A  B
#43  A  B  A  D
#72  A  B  D  B
#73  A  B  B  D
#75  A  B  D  C
#一些数据:
种子(42)

DF详细的方法是动态地将子集标准构造为字符串,然后对其进行评估,例如

准备一些数据

df1 <- as.data.frame(replicate(4, sample(1:3, 10, rep=T)))
names(df1) <- LETTERS[1:4]
df2 <- df1
构造子集标准

classifiers <- LETTERS[1:4]
subs <- paste0(classifiers, "== df2[1,'", classifiers, "']", collapse=" & ")
subset(df1, eval(parse(text=subs)))

  A B C D
1 2 1 1 2

分类器我会使用
合并

merge(df1, df2[1, classifiers])

你想知道df1中所有列值为A、B、C、D的行吗?财富106:“如果答案是parse(),你通常应该重新思考这个问题。-托马斯·卢姆利“太棒了!那就更好了!
merge(df1, df2[1, classifiers])