具有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
数据帧之间:
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,]
我真正希望做的是对三列条件进行子集df1
化df2
,这样我只能在 df1 中获得行,其中 a,b,c 在一行中同时等于 x,y,z。在实际数据中,我将有超过 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"))
这给了我想要的东西,但我想了解为什么我的[
尝试是错误的。