【问题标题】:Renaming each element in a list using select.list使用 select.list 重命名列表中的每个元素
【发布时间】:2013-08-05 12:19:29
【问题描述】:

我想用全名重命名缩写名称列表。如果我可以拉出一个 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"

【问题讨论】:

  • sapply(Abbrev, function(x) select.list(Full))(点击选项 1,1,1,2,2,3,3)...

标签: r rename apply


【解决方案1】:

如果您真的想使用 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 是对的,这似乎没有必要。

【讨论】:

    【解决方案2】:

    只是一个想法,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
    

    【讨论】:

      猜你喜欢
      • 2021-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 2021-05-01
      • 2021-03-08
      • 1970-01-01
      • 2020-09-20
      相关资源
      最近更新 更多