使用select.list重命名列表中的每个元素

时间:2013-08-04 20:22:21

标签: r rename apply

我想用他们的全名重命名缩写名称列表。如果我能够为每个名称选择一个GUI列表,那将是最简单的。

所以给出了一个独特的缩写名称列表

 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 $ Abbrev ==“C”&lt; - “Cat”)来创建此列表,但我希望根据“Full”设置每个单独的行“名单

2 个答案:

答案 0 :(得分: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 :(得分: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