首页 > 解决方案 > tidyverse 在给定一系列键的情况下在数据框中查找值的方法

问题描述

假设我有一个如下数据框

df=data.frame(x=1:5,y=c("a","b","c","d","e"))

y关键列在哪里。有时我想查找x对应于y. 为了做到这一点,我可以

row.names(df)=df$y
df[c("b","d","c"),c("x")]

我会得到

[1] 2 4 3

请注意,返回值的顺序与一系列给定键的顺序相同。

现在我想使用 tidyverse 的 tibble 来实现同样的目标。但是由于 tibble 没有row.names,我不知道该怎么做。

我的问题是,在给定一系列键的情况下,按照键的顺序在 tibble 中查找值的“最聪明”的方式(或惯用的方式,从 Python 中借用一个术语)是什么?

标签: rdataframetidyverse

解决方案


使用 data.frame 执行此操作的非行名方式是

df[match(c('b', 'd', 'c'), df$y), 'x']

这也适用于小标题。或者,使用dplyr动词:

df %>% slice(match(c('b', 'd', 'c'), y)) %>% pull(x)

推荐阅读