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

作者: celestialgod (天)   2016-11-20 14:24:11
※ 引述《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% 處理就用這些運算子處理
作者: hirdaramani (Hirdaramani)   2016-11-20 14:25:00
好~~資料好多我會努力看完再來請教的 謝謝兩位指點

Links booklink

Contact Us: admin [ a t ] ucptt.com