【发布时间】:2015-02-08 12:17:26
【问题描述】:
我有一个数据框 a,其中包含 4 个标识列:A, B, C, D。使用ddply() 创建的第二个数据框b 包含每组A,B,C 的不同Ds 的所有值的摘要。第三个数据框c 包含b 的子集,其中包含我想从a 中删除的错误值。
因此,我想要来自a 的子集,省略由A,B,C 组合标识的所有行,这些行也存在于c 中。我可以想办法在循环中做到这一点(丑陋和低效),但是,我的 DBA 背景鼓励我寻求一种更……直接的解决方案。
在代码中:
a <- data.frame(
A=rep(c('2013-10-30', '2014-11-6'), each=16*20),
B=rep(1:8, each=2*20),
C=rep(1:4, each=20),
D=1:20
)
a$Val=rnorm(nrow(a))
library(plyr)
b <- ddply(a, ~B+C+A, summarise,
mean_Val=mean(Val))
# Some subset criteria based on AOI group values
c <- subset(b, mean_Val <= 0)
# EDIT: Delete all the rows from a for which the
# key-triplets A,B,C are present in c
for (i in 1:nrow(c)) {
c_row = c[i,]
a <- a[ which( !(a$A==c_row$A & a$B==c_row$B & a$C==c_row$C) ), ]
}
# This is the loopy type of 'solution' I didn't want to use
也请随时解决我的问题中的不明确之处。如果您能指出正确的方向,我很乐意进行编辑。
【问题讨论】:
-
请提供一些示例数据集和预期结果。另外,您的描述并不具体。摘要可以是均值、总和、中位数等。
-
感谢@akrun 的评论。我将尝试包含原始数据集的信息部分。
-
我现在添加了一个循环,它以迂回的方式创建结果,试图满足@David 对预期结果数据的 [已删除] 请求。