在分析脚本中,我必须多次执行以下子命令:
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])
答案 0 :(得分:1)
喜欢这个吗?
#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
答案 1 :(得分:1)
一种冗长的方法是动态地将子集标准构造为字符串,然后对其进行评估,例如
准备一些数据
df1 <- as.data.frame(replicate(4, sample(1:3, 10, rep=T)))
names(df1) <- LETTERS[1:4]
df2 <- df1
您的方法
subset(df1, A == df2[1,'A'] & B == df2[1,'B'] & C == df2[1,'C'] & D == df2[1,'D'])
A B C D
1 2 1 1 2
构建子集标准
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
paste
将标准创建为字符串,即"A== df2[1,'A'] & B== df2[1,'B'] & C== df2[1,'C'] & D== df2[1,'D']"
。 eval-parse组合将字符串计算为表达式。
答案 2 :(得分:1)
我会使用merge
:
merge(df1, df2[1, classifiers])