1

我想用全名重命名缩写名称列表。如果我可以拉出一个 GUI 列表来为每个名称进行选择,那将是最简单的。

所以给定一个唯一的缩写名称列表

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

以及他们全名的清单

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

理想情况下,我想浏览 Abbrev 列表中的每个元素,并让它在我的屏幕上弹出,以及一个可供选择的全名列表。所以对于每个独特的缩写,我想拉一个

select.list(Full)

最终结果将如下所示:

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

我意识到我可以将每个缩写设置为等于它的全名 (DF$Abbrev=="C"<- "Cat") 来创建这个列表,但我希望根据“全名”列表设置每一行

4

2 回答 2

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 是对的,这似乎没有必要。

于 2013-08-04T20:32:24.600 回答
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
于 2013-08-04T20:32:32.593 回答