【问题标题】:Assigning a large number of variables (from a lookup table?)分配大量变量(来自查找表?)
【发布时间】:2013-05-06 11:47:07
【问题描述】:

我有一个双列查找表,第一列是名称,第二列是非连续数字:

Name    Number
ArcBo     16
ArcGl     41
BorSa    534
EleGr    121
GadMa    249
GadMo    448

我的最终目标是能够将名称传递给我的脚本,并让脚本返回名称的关联编号。我设想做一些类似于在 Python 中构建字典的事情,可能会使用哈希,但我对 R 还是很陌生,而且环境似乎非常具有挑战性。还有另一种方法可以解决这个问题吗?我尝试了遍历表的最终简单解决方案,如下所示:

for (i in (1:nrow(lookupTable))){
+ lookupTable[i,2] <- lookupTable[i,1]
+ }

但所做的只是用名称替换数字,这样我就有两列名称而没有数字。

【问题讨论】:

  • 您可以将其存储为 data.frame。然后,您可以通过 DF$Number[DF$Name == "ArcBo"] 访问与名字对应的号码。
  • 由于您是新来的,您可能想阅读the aboutfaq 了解 SO 的工作原理。如果当您收到解决问题的答案时,您通过单击小复选标记接受它,那么 StackOverflow 对每个人都更有价值。您绝对没有义务这样做,但如果答案确实解决了您的问题,这是一种“回馈”网站的好方法,并通过删除已回答的内容来帮助保持网站清洁未回答的问题堆栈中的问题。

标签: r variable-assignment lookup


【解决方案1】:
lookuptab[lookuptab$Name==lookupvalue,2]

或者,作为一个函数:

lookup <- function(lookupvalue)
    lookuptab[lookuptab$Name==lookupvalue,2]
lookup("ArcBo")
lookup("GadMa")

【讨论】:

    【解决方案2】:

    如果你想要一个函数,它应该可以按照你的意愿工作:

    flookup <- function(x , df , lkup = 1 , ret = 2 ){
    return( df[ df[,lkup] %in% x , ret ] )
    }
    

    您可以指定查找值x、在df 中查找它的data.frame、用于查找的列lkup 以及从ret 返回的列。

    flookup( "ArcBo" , df , 1 , 2 )
    # [1] 16
    

    如果您愿意,它可以让您灵活地一次查找多个名称:

    flookup( c("ArcBo" , "EleGr") , df , 1 , 2 )
    # [1]  16 121
    

    【讨论】:

      【解决方案3】:

      qdap 库使用非常易于使用的环境(哈希)查找。

      在这里,我解决了您的问题并组成了一个值向量以供查找:

      lookupTable <- read.table(text="Name    Number
      ArcBo     16
      ArcGl     41
      BorSa    534
      EleGr    121
      GadMa    249
      GadMo    448", header=TRUE)
      
      I_want_2_look_u_up <- sample(lookupTable$Name, 25, T)
      
      
      ## > I_want_2_loo_u_up
      ##  [1] ArcBo ArcBo EleGr ArcGl GadMa ArcBo ArcGl ArcGl ArcGl GadMo GadMa ArcGl
      ## [13] ArcBo GadMo ArcBo BorSa ArcGl ArcGl GadMo ArcGl GadMo ArcBo EleGr GadMo
      ## [25] GadMa
      ## Levels: ArcBo ArcGl BorSa EleGr GadMa GadMo
      
      library(qdap)
      lookup(I_want_2_look_u_up, lookupTable)
      
      ## > lookup(I_want_2_look_u_up, lookupTable)
      ##  [1]  16  16 121  41 249  16  41  41  41 448 249  41  16 448  16 534  41  41 448
      ## [20]  41 448  16 121 448 249
      

      【讨论】:

        猜你喜欢
        • 2020-01-13
        • 1970-01-01
        • 2017-01-31
        • 1970-01-01
        • 2020-09-29
        • 2017-02-13
        • 1970-01-01
        • 2021-12-06
        • 1970-01-01
        相关资源
        最近更新 更多