【问题标题】:How to get dictionary functionality from a data.frame in R如何从 R 中的 data.frame 获取字典功能
【发布时间】:2015-01-14 13:46:22
【问题描述】:

R 似乎没有字典结构。假设我有一个具有唯一名字(键)的人的 data.frame:

people = data.frame(c("Bob", "Jones"), c("Sally", "Smith"));
names(people) = c("Firstname", "Surname");

我想知道SallySurname是什么,只知道她的Firstname

我可以编写一些遍历people$Firstname 的丑陋代码,跟踪索引,然后在找到匹配项后在该索引处获取people$Lastname,但这可能不是正确的方法。

执行此操作的“R 方式”是什么?

【问题讨论】:

  • R 确实有类似字典的结构:列表和环境。 [r] dictionary 的任何搜索结果都没有解释您需要什么?

标签: r dictionary dataframe


【解决方案1】:

我不认为您的数据框是按照您认为的方式制作的。使用这个,很简单:

people <- data.frame(Firstname=c("Bob", "Sally"),
                     Surname=c("Jones", "Smith"), 
                     stringsAsFactors=FALSE)

people[people$Firstname=="Sally",]$Surname
## [1] Smith

您也可以将其制作为列表:

ppl <- list("Bob"=list(Surname="Jones"),
            "Sally"=list(Surname="Smith"))

ppl[["Bob"]]
## $Surname
## [1] "Jones"

【讨论】:

    【解决方案2】:

    为了好玩,对于您提供的这个特定示例,您还可以使用基础 R 中的 person 函数。这里,我使用了 as.person

    people <- c(as.person("Bob Jones"), as.person("Sally Smith"))
    str(people)
    # List of 2
    #  $ :Class 'person'  hidden list of 1
    #   ..$ :List of 5
    #   .. ..$ given  : chr "Bob"
    #   .. ..$ family : chr "Jones"
    #   .. ..$ role   : NULL
    #   .. ..$ email  : NULL
    #   .. ..$ comment: NULL
    #  $ :Class 'person'  hidden list of 1
    #   ..$ :List of 5
    #   .. ..$ given  : chr "Sally"
    #   .. ..$ family : chr "Smith"
    #   .. ..$ role   : NULL
    #   .. ..$ email  : NULL
    #   .. ..$ comment: NULL
    #  - attr(*, "class")= chr "person"
    
    people$given
    # [[1]]
    # [1] "Bob"
    # 
    # [[2]]
    # [1] "Sally"
    
    people[people$given == "Bob"]
    # [1] "Bob Jones"
    people[people$given == "Bob"]$family
    # [1] "Jones"
    

    【讨论】:

      猜你喜欢
      • 2010-11-19
      • 2011-12-10
      • 2020-09-26
      • 1970-01-01
      • 2015-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多