作者f496328mm (为什麽会流泪)
看板R_Language
标题[问题] 资料筛选相关问题 多对多
时间Tue Aug 16 19:11:38 2016
举例来说
x=c(123,456,897,243,651,852,964,357,555)
y=c(651,852,111)
我想要从 x 中 筛选出 y 中有的变数 651 852 111
111没有出现在 x 中 所以不用显示出来
基本上我想要的就是位置 5,6 ( 651=x[5] 852=x[6] )
目前我的想法是
#先用布林值去判断哪个为true
#再去找位置
bo = as.integer( x == y[1] )
bo_matr = matrix(bo)
map =
which(apply(bo_matr, 1L,function(row) all(row == 1)))
这样就很清楚知道是 x 中的 5,6 是我要的 (因为 true=1 )
但是这样很花时间
因为我 x y 各有上百万笔row
每次都百万笔去做布林比对
非常没效率
所以想问问看有没有类似函数可以帮我做筛选
谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.36.53.171
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/R_Language/M.1471345900.A.1A8.html
1F:→ andrew43: x %in% y 如何? 08/16 19:27
2F:→ andrew43: 但这不能告诉你谁是谁… 08/16 19:28
感谢版主T.T 成功了
看起来是一次比对全部 执行速度也很快
另外类似这种 %in% 的用法 有文章介绍吗?
http://chingchuan-chen.github.io/r/2015/07/01/magrittr
我有看过这篇 里面有讲一些
a_list %>% unlist %>% unique %>% sort
这些写得蛮详细的 正在学习中
这种方法对我来说 算是比较高阶的语法了
目前我资料整理 都还是用矩阵的方式
筛选 合并 cbind 这类的code
谢谢
3F:→ celestialgod: library(pipeR); match(y,x) %>>% `[`(!is.na(.)) 08/16 19:40
※ 编辑: f496328mm (114.36.53.171), 08/16/2016 19:47:32
4F:→ celestialgod: 第一次看到自己部落格在别人文章中有点害羞>///< 08/16 19:48
>///<
话说R版的版主都好热心 回应速度都超快
学到了很多 感谢><
※ 编辑: f496328mm (114.36.53.171), 08/16/2016 19:52:22
※ 编辑: f496328mm (114.36.53.171), 08/16/2016 19:53:24