2013-08-04 68 views
1

我想用全名重命名縮寫名稱列表。如果我能夠拉出一個GUI列表來爲每個名稱選擇,這將是最簡單的。使用select.list重命名列表中的每個元素

所以給出的唯一的縮寫名稱

Abbrev<-c("C","Ca","CA","D","Do","Ham","Hammy","C","Hammy","D","Ham") 
Abbrev<-unique(Abbrev) 

列表,並

Full<-c('Cat','Dog','Hamster') 

理想情況下,我想經歷在縮略列表中的每個元素,有它自己的全名的列表在我的屏幕上彈出一個全名可供選擇的列表。因此,對於每一個獨特的縮寫,我想拉

select.list(Full) 

最終的結果是這樣的:

Abbrev Full 
C  Cat 
Ca  Cat 
CA  Cat 
D  Dog 
Do  Dog 
Ham  Hamster 
Hammy Hamster 

我知道我可以設置每個縮寫等於它的全名(DF $縮寫= =「C」< - 「Cat」)創建此列表,但我希望根據「完整」名稱列表設置每個單獨的行

+1

'sapply(縮寫,功能上找到( x)select.list(Full))'(命中選擇1,1,1,2,2,3,3)... – Arun

回答

2

如果您確實想使用GUI界面來執行此操作,請嘗試像這樣:

out <- lapply(Abbrev,function(x) { 
    z <- select.list(Full,title=paste("Name:",x)) 
    return(list(abbrev=x,full=z)) 
}) 
out <- cbind(sapply(out,function(x) x$abbrev), sapply(out,function(x) x$full)) 
fullout <- out[out[,1]==Abbrev,2] 

但是,@RicardoSaporta是正確的,這似乎是不必要的。

1

只是一個想法,pmatch可以爲你做了很多提升:

# using pmatch does much of the work for you: 
someNames <- Full[sapply(tolower(Abbrev), pmatch, tolower(Full))] 
names(Abbrev) <- someNames 
Abbrev 
# Cat  Cat  Cat  Dog  Dog Hamster <NA>  Cat <NA>  Dog Hamster 
# "C" "Ca" "CA"  "D" "Do" "Ham" "Hammy"  "C" "Hammy"  "D" "Ham" 

不匹配的那些可以通過is.na

is.na(Abbrev) 

# or modified by hand: 
names(Abbrev)[c(7, 9)] <- c("Hamster", "Hamster") 

Abbrev 
相關問題