R似乎没有字典结构。让我们说我有一个拥有唯一名字(键)的人的数据框:
people = data.frame(c("Bob", "Jones"), c("Sally", "Smith"));
names(people) = c("Firstname", "Surname");
我想知道Sally
Surname
是什么,只知道她Firstname
。
我可以写一些遍历people$Firstname
的丑陋代码,跟踪索引,然后在找到匹配后在该索引处获取people$Lastname
,但这可能不是正确的方式。
" R方式"这样做?
答案 0 :(得分:4)
我不认为您的数据框架是按照您的想法制作的。使用这个,非常简单:
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"
答案 1 :(得分:1)
为了好玩,对于您提供的这个特定示例,您还可以使用基础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"