如何在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])