Re: [問題] 用兩個檔案找相同的值

看板R_Language作者 (天)時間9年前 (2016/11/20 14:24), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串3/3 (看更多)
※ 引述《hirdaramani (Hirdaramani)》之銘言: : : [問題類型]: : : 程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來) : : [軟體熟悉度]: : 請把以下不需要的部份刪除 : 新手~~ : [問題敘述]: : A檔案是name,B檔案有name和age : 想要知道當發現A某個name的時候 可以去B的data.frame找到他的age : [程式範例]: : name <- c("Joe", "Bob", "Vicky") : age <- c("28", "26", "34") : data <- data.frame(name, age) : name_data <-c("Joe", "Bob", "Vicky") : for (i in name_data){ : for(x in 1:length(data$name)) : { : if(i ==data$name[x]) : age_x <- data$age[x] : } : } : 以上是我自己想出來用兩個迴圈寫的 只是感覺有點蠢,應該有更聰明方便的方法 : 本質上我就是想要類似excel的vlookup但是要可以在去叫出那個值。 : 謝謝各位前輩的分享教學 : 想要增進自己的能力避免自己只會當LOSER~~~~ : library(data.table) library(dplyr) DT <- data.table(name = c("Joe", "Bob", "Vicky"), age = c(28, 26, 34)) queryNames <- c("Joe", "Bob") ## dplyr # length(queryNames) == 1 filter(DT, name == queryNames[1]) # length(queryNames) > 1 filter(DT, name %in% queryNames) ## data.table # length(queryNames) == 1 DT[name == queryNames[1]] # length(queryNames) > 1 DT[name %in% queryNames] 另外前一篇提到join data.table::merge 或是 dplyr::*_join的適用情況比較像下面這樣 DT <- data.table(name = c("Joe", "Bob", "Vicky"), sex = c("M", "M", "F") age = c(28, 26, 34)) queryConDT <- data.table(name = c("Joe", "Vicky"), sex = c("M", "F")) # dplyr inner_join(DT, queryConDT) # merge merge(DT, queryConDT) 也就是有兩個以上條件要做查詢的時候再去使用 merge, *_join 為了去join還有做不少運算 能夠用 == 或是 %in% 處理就用這些運算子處理 -- R資料整理套件系列文: magrittr #1LhSWhpH (R_Language) https://goo.gl/OBto1x data.table #1LhW7Tvj (R_Language) https://goo.gl/QFtp17 dplyr(上.下) #1LhpJCfB,#1Lhw8b-s (R_Language) https://goo.gl/GcfNoP tidyr #1Liqls1R (R_Language) https://goo.gl/pcq5nq pipeR #1NXESRm5 (R_Language) https://goo.gl/cDIzTh -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.233.51.224 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1479623056.A.8D9.html

11/20 14:25, , 1F
好~~資料好多我會努力看完再來請教的 謝謝兩位指點
11/20 14:25, 1F
文章代碼(AID): #1OCK6GZP (R_Language)
文章代碼(AID): #1OCK6GZP (R_Language)