Re: [问题] 利用R 筛选字段内相同资料

楼主: celestialgod (天)   2016-08-21 14:33:21
※ 引述《Tampa (光芒)》之铭言:
: ※ 引述《Tampa (光芒)》之铭言:
: : 作者: Tampa (光芒) 看板: Database
: : 标题: [SQL ] 筛选字段内相同资料
: : 时间: Fri Aug 19 23:28:06 2016
: 谢谢各位大大回复
: 新增一个问题
: : 问题如下
: 手机号码4 天数4 手机号码5 天数5
: : 111 3 118 4
: : 112 4 113 5
: : 113 5 111 8
: : 115 5 116 9
: : 118 6 119 10
: : . . . .
: 筛选条件如下
: 1.当手机号码4中 有符合手机号码5的资料,则回传天数4所对应字段的资料
: (类似excel的index)
: : 希望呈现如下
: : 手机号码4 天数4 手机号码5 天数5
: : 111 3 111 8
: : 113 5 113 5
: 118 6 118 4
: 情境就是
: 想分析公司推完活动后,是否有明显增加使用者使用的天数
: 感谢各位大大
cp_num_gen_f <- function(n) paste0("09", apply(matrix(sample(0:9, 8*n, TRUE),
n), 1, paste0, collapse =""))
dat <- data.frame(cp4 = cp_num_gen_f(10), nd4 = rpois(10, 5), cp5 = 0,
nd5 = rpois(10, 6), stringsAsFactors = FALSE)
dat$cp5 <- c(sample(dat$cp4, 3), cp_num_gen_f(7))
# 1.
match(dat$cp5, dat$cp4)
# 2.
library(dplyr)
dat %>% mutate(idx = match(cp5, cp4)) %>%
mutate(cp4_match = dat[idx, 1], nd4_match = dat[idx, 2]) %>%
filter(!is.na(cp4_match))
# cp4 nd4 cp5 nd5 idx cp4_match nd4_match
# 1 0969429990 7 0993267331 6 2 0993267331 2
# 2 0993267331 2 0941547740 4 4 0941547740 4
# 3 0999020937 4 0930712667 2 7 0930712667 1
8/22修改:调换index顺序,才符合原PO的问题
作者: cywhale (cywhale)   2016-08-22 11:11:00
这题用intersect如何~DT<-data.table(dat)%>%setkey(cp4)DT[intersect(cp4,cp5),]
楼主: celestialgod (天)   2016-08-22 18:44:00
intersect没有位置资讯会不合适,还是用match处理比较妥当只是资料量比较大的时候,要记得先把match算出来当作column再做后面计算

Links booklink

Contact Us: admin [ a t ] ucptt.com