如何从 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");
想知道Sally
的Surname
是什么,只知道她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"
R 似乎没有字典结构。假设我有 data.frame 人拥有唯一的名字(键):
people = data.frame(c("Bob", "Jones"), c("Sally", "Smith"));
names(people) = c("Firstname", "Surname");
想知道Sally
的Surname
是什么,只知道她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"