代码之家  ›  专栏  ›  技术社区  ›  Brandon Bertelsen

根据另一个数据帧的内容对数据帧进行子集设置

  •  12
  • Brandon Bertelsen  · 技术社区  · 14 年前

    我有两个数据帧。为了举例,我们假设它们看起来像这样:

    df1 <- data.frame(x=rep(letters[1:26], 16))
    df2 <- data.frame(y=letters[1:4])
    

    我要做的是将“df1”子集包含其第一列值与“df2”第一列中的任何值匹配的行。

    现在,我尝试过:

    subset(df1, df1$x == df2$y)
    

    但这说明我需要大小相同的data.frames。思想?

    1 回复  |  直到 13 年前
        1
  •  14
  •   Dirk is no longer here    14 年前

    两个 %in% match() 可以用来做这个。前者是:

    > which( df1$x %in% df2$y )
     [1]   1   2   3   4  27  28  29  30  53  54  55  56  79  80  81  82 105
    [18] 106 107 108 131 132 133 134 157 158 159 160 183 184 185 186 209 210
    [35] 211 212 235 236 237 238 261 262 263 264 287 288 289 290 313 314 315
    [52] 316 339 340 341 342 365 366 367 368 391 392 393 394
    > 
    >
    > table(df1[ which( df1$x %in% df2$y ), "x"])
    
     a  b  c  d  e  f  g  h  i  j  k  l  m  n  o  p  q  r  s  t  u  v  w  x  y 
    16 16 16 16  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
     z 
     0 
    >