作者celestialgod (天)
看板R_Language
标题Re: [问题] 利用R 筛选栏位内相同资料
时间Sun Aug 21 14:33:21 2016
※ 引述《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的问题
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 111.253.89.216
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/R_Language/M.1471761205.A.03A.html
1F:推 cywhale: 这题用intersect如何~DT<-data.table(dat)%>%setkey(cp4) 08/22 11:11
2F:→ cywhale: DT[intersect(cp4,cp5),] 08/22 11:12
3F:推 cywhale: 事实上我後来发现版主c大的方法比较完整,不只是subset 08/22 15:08
4F:→ cywhale: 且会正确地回传 (cp5, nd5) 对应的栏位 08/22 15:08
5F:→ celestialgod: intersect没有位置资讯会不合适,还是用match处理比 08/22 18:44
6F:→ celestialgod: 较妥当 08/22 18:44
7F:→ celestialgod: 只是资料量比较大的时候,要记得先把match算出来当 08/22 18:44
8F:→ celestialgod: 作column再做後面计算 08/22 18:44
※ 编辑: celestialgod (118.170.43.225), 08/22/2016 22:43:26