基于另一个数据帧的内容来设置数据帧 [英] Subsetting a data frame based on contents of another data frame

查看:81
本文介绍了基于另一个数据帧的内容来设置数据帧的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两个data.frames。例如,我们来看看吧,看起来像这样:

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

我想做的是子集'df1'以包含其第一列值与'df2'的第一列中的任何值匹配的行。



现在,我试过:

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

但是这告诉我,我需要同样大小的数据。 。想法?

解决方案

<%c $ c>% ()可以用于此。以下是前者:

 > (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
>
>
>表(df1 [which(df1 $ x%in%df2 $ y),x])

abcdefghijklmnopqrst uvwxy
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
>


I have two data.frames. For examples sake let's say they look like this:

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

What I would like to do is subset 'df1' to contain the rows whose first column value matches any value within the first column of 'df2'.

Now, I've tried:

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

But this tells me that I need equally sized data.frames. Thoughts?

解决方案

Both %in% and match() can be used for this. Here is the former:

> 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 
> 

这篇关于基于另一个数据帧的内容来设置数据帧的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆