df1
とをdf2
次のように持つ:
df1 <- read.table(text =" x y z
1 1 1
1 2 1
1 1 2
2 1 1
2 2 2",header=TRUE)
df2 <- read.table(text =" a b c
1 1 1
1 2 8
1 1 2
2 6 2",header=TRUE)
次のような多くのことをデータに尋ねることができます。
df2[ df2$b == 6 | df2$c == 8 ,] #any rows where b=6 plus c=8 in df2
#and additive conditions
df2[ df2$b == 6 & df2$c == 8 ,] # zero rows
data.frame 間:
df1[ df1$z %in% df2$c ,] # rows in df1 where values in z are in c (allrows)
これにより、すべての行が得られます。
df1[ (df1$x %in% df2$a) &
(df1$y %in% df2$b) &
(df1$z %in% df2$c) ,]
しかし、これはあまりにもすべての行を私に与えるべきではありませdf1
ん:
df1[ df1$z %in% df2$c | df1$b == 9,]
私が本当に望んでいるのは、a、b、c がすべて同じ行内で同時に x、y、z に等しい df1 の行のみを取得するように、3 つの列条件でdf1
anをサブセット化することです。df2
実際のデータでは、3 つ以上の列がありますが、3 つの追加の列条件でサブセット化する必要があります。
したがって、結果の例のデータdf1
をサブセット化すると、次のようになります。df2
df1
1 1 1
1 1 2
構文をいじるとさらに混乱し、SOの投稿はすべて私が望むもののバリエーションであり、実際には私にとってより多くの混乱につながります.
私はこれを行うことができると考えました:
merge(df1,df2, by.x=c("x","y","z"),by.y=c("a","b","c"))
それは私が望むものを私に与えますが、私の[
試みが間違っている理由を理解したいと思います。