Re: [問題] 利用R 篩選欄位內相同資料

看板R_Language作者 (天)時間7年前 (2016/08/21 14:33), 7年前編輯推噓2(206)
留言8則, 2人參與, 最新討論串5/7 (看更多)
※ 引述《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://www.ptt.cc/bbs/R_Language/M.1471761205.A.03A.html

08/22 11:11, , 1F
這題用intersect如何~DT<-data.table(dat)%>%setkey(cp4)
08/22 11:11, 1F

08/22 11:12, , 2F
DT[intersect(cp4,cp5),]
08/22 11:12, 2F

08/22 15:08, , 3F
事實上我後來發現版主c大的方法比較完整,不只是subset
08/22 15:08, 3F

08/22 15:08, , 4F
且會正確地回傳 (cp5, nd5) 對應的欄位
08/22 15:08, 4F

08/22 18:44, , 5F
intersect沒有位置資訊會不合適,還是用match處理比
08/22 18:44, 5F

08/22 18:44, , 6F
較妥當
08/22 18:44, 6F

08/22 18:44, , 7F
只是資料量比較大的時候,要記得先把match算出來當
08/22 18:44, 7F

08/22 18:44, , 8F
作column再做後面計算
08/22 18:44, 8F
※ 編輯: celestialgod (118.170.43.225), 08/22/2016 22:43:26
文章代碼(AID): #1NkKir0w (R_Language)
討論串 (同標題文章)
文章代碼(AID): #1NkKir0w (R_Language)