如何从 R 中的 data.frame 获取字典功能

How to get dictionary functionality from a data.frame in R

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

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

想知道SallySurname是什么,只知道她Firstname.

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

这样做的 "R way" 是什么?

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

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"

为了好玩,对于您提供的这个特定示例,您还可以使用基础 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"