Re: [問題] 用兩個檔案找相同的值
※ 引述《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
討論串 (同標題文章)
R_Language 近期熱門文章
PTT數位生活區 即時熱門文章