Подмножество фрейма данных на основе ключа, охватывающего несколько столбцов в другом (итоговом) фрейме данных
У меня есть фрейм данныхa
с 4 идентифицирующими столбцами:A, B, C, D
, Второй кадр данныхb
, созданный сddply()
, содержит сводку всех значений для разныхD
s для каждого набораA,B,C
, Третий кадр данных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
Пожалуйста, не стесняйтесь также решать неясности в моем вопросе. Я был бы рад отредактировать, если вы можете указать мне правильное направление.