使用for循環說我有一個查找表如下查找表與任意長度查詢而不中的R
dt <- data.frame(name=c("jack","jill","sam","dan"),age=c(20,14,28,13))
name age
1 jack 20
2 jill 14
3 sam 28
4 dan 13
現在我想以下矢量轉換成包含每個元素的年齡的矢量。
query1 <- c("jack","dan")
query2 <- c("sam")
query3 <- c("jack","sam", "dan")
我可以建立下面的函數(我不喜歡)來完成這一任務,
get.age <- function(x) {
answer <- list()
for(i in 1:length(x)){
answer[[i]]<- dt[dt$name==x[i],"age"]
}
ldply(answer)$V1
}
它得到這樣
> get.age(query1)
[1] 20 13
> get.age(query2)
[1] 28
> get.age(query3)
[1] 20 28 13
但是,我做的工作不喜歡解決方案,因爲它使用for循環和一些骯髒的黑客。理想情況下,我會想這樣做R-喜歡使用矢量操作這樣的(這似乎不工作)更
> dt[dt$name==c("jack","dan"),"age"]
[1] 20 13 #worked
> dt[dt$name==c("jack","sam"),"age"]
[1] 20 # not the right answer
以下解決方案的工作,但這需要我多少事情查找的先驗知識。
dt [dt $ name ==「jack」| DT $名稱==「山姆」,「年齡」]
[1] 20 28
我想知道,可以處理的關鍵元素轉換,而無需使用for循環載體的任意大小的方法,如果有任何
類似於:http://stackoverflow.com/questions/4135102/looking-up-values-in-r – Tyler